Честопати се јавува ситуација дека е неопходно да се прошири функционалноста на методот emarket basket(), кој е одговорен за додавање стоки во количката. Во системската верзија 2.8.4.3 и пониска во методот кошницаНастанот за прилагодување на оваа акција сè уште не е регистриран, па за да го решиме проблемот од нашиот пример, методот на кошница ќе го преместиме во приспособена датотека.

Задача:При додавање на производ во кошничката, потребно е да му се овозможи на купувачот да остави мал коментар за производот што ќе го додаде во кошничката, овој коментар мора да се види и во административниот дел при прегледување на параметрите на нарачката. Исто така, ќе додадеме функционалност на нашиот нов метод што ќе ви овозможи да ја зголемите или намалите количината на кој било елемент на нарачката за еден.

Решение:Ајде да го копираме кодот на методот на кошница од датотеката __купување.php, да поднесе класи/модули/emarket/__custom.phpи преименувајте го методот во кошница_прилагодено. Во новиот метод, линијата:

$rder = self::getBasketOrder(! in_array($mode, array("стави", "отстрани")));

треба да се смени во:

$order = $this -> getBasketOrder (! in_array ($mode , array ( "стави" , "отстрани")));

По линијата:

ако ($itemType == "елемент" ) (

$orderItem -> dop_info = htmlspecialchars(getRequest("dop_info" ));

овој код ќе ја додаде положената вредност од полето во елементот за нарачка dop_info.

За да ја конфигурирате функционалноста за зголемување или намалување на количината на кој било елемент на нарачката, мора:

после линијата:

$options = getRequest("опции");

додадете:

$mode_change = (int) getRequest ("change_item");

а исто така и по линијата:

$amount = $amount ? $amount : ($orderItem -> getAmount() + 1 );

додадете:

ако ($mode_change) $amount = ($mode_change == 1) ? $orderItem -> getAmount () + 1 : $orderItem -> getAmount () - 1 ;

Ако го користиме примерот на моторот за шаблон TPL, тогаш кога се користи во шаблон tpls/emarket/default.tpl, во блокот нарачка_ставка, линкови:

+ -

на кои можете да прикачите копчиња, можете да ја зголемите или намалите количината на која било ставка на нарачка за едно.

низа ("basket_custom" )); ?>

Во шаблоните на сајтот, треба да се креира формулар за додавање производ во количката, акција за форма, стандардна, освен што наместо методот на кошница треба да наведете basket_custom. Исто така, треба да додадете влез во самата форма:

< input name = "dop_info" style = "width: 100px;" type = "text" />

Во административниот дел, во модулот Шаблони за податоцитреба да го отворите типот на податоци за уредување Со цел, добијте ја неговата xml репрезентација со додавање на крајот од лентата за адреси на прелистувачот: .xml

Примените податоци ќе го содржат приближно следниот блок:

„Имиња на нарачки“ field-type-id= "12"visible= "visible" guide-id= "73" > „Опаѓачка листа со повеќекратен избор“ data-type= "relation" multiple= "multiple" />

во која водич-id = "73", потоа отворете го типот на податоци со type_id = 73 за уредување, користејќи ја врската /admin/data/type_edit/73/. Во групата „Својства на име“, додајте друго поле од типот String, со идентификатор на стринг dop_info. За да се прикаже зачуваната вредност, кога детално ја гледаме нарачката, ќе преназначиме некои шаблони од датотеката \styles\skins\mac\data\modules\emarket\order-edit.xsl, да бидеме попрецизни, ќе додадеме на името на елементот за нарачка, испуштајќи ја вредноста од полето dop_info. За да го имплементирате овој дел од нарачката, додајте ја датотеката: \styles\skins\mac\data\modules\emarket\form.modify.custom.xslсо следнава содржина:

"http://www.w3.org/1999/XSL/Transform" xmlns:xlink= "http://www.w3.org/TR/xlink" >
"предмет"режим= „име на нарачка“ > „($lang-prefix)/admin/catalog/edit/(//property/value/page/@id)/“>
"//property[@name = "dop_info"]/value" />

По завршувањето на сите опишани дејства, кога купувачот ќе додаде ставка за нарачка, може да посочи краток коментар за додадениот производ, а администраторот на продавницата, кога детално ќе ја прегледа нарачката, ќе може да го прочита овој коментар.

Всушност, прашањето е за имплементацијата на продавницата и како ќе ја оценам.

Прво, да погледнеме во вистинска продавница, како работи, кои функции се имплементирани таму и нејзината цена.

И така, онлајн продавницата на Bitrix може да се имплементира во 2 изданија: мал бизнис и бизнис.

Која е главната разлика за продавницата?

1. Не постои модул за рекламирање - изводливоста на овој модул може да се доведе во прашање; може да се имплементира на информативни блокови и ќе работи брзо и добро, а самиот модул е ​​тежок, во некои случаи воопшто не е препорачлив

2. Самиот модул за онлајн продавница е различен по тоа што во бизнисот нема ограничувања за бројот на цените на стоките и нема комплети или комплети; во мал бизнис има само еден магацин, нема филијали (прашањето дискутабилно е дали е потребно во повеќето случаи) и не можете да продавате електронска содржина, а останатото функционира на ист начин во редакциите на продавниците.

Она што го имаме, Bitrix е целосно интегриран со 1C, малиот бизнис е добар ако нема магацини и различни цени, на пример, на големо и за стоки. Бизнис е продавница со заби со чудовишта која е подготвена за секое претпријатие.

А цената: 9.000 и 19.000 е забележлива разлика.

Почетни чини 1.400 т.е. всушност, преостанатите додавања се 7.600 и 17.600, соодветно.

Во просек, на размена на труд, работата на PHP програмер е 5-10 долари на час, т.е. 130 UAH - 260 UAH. 58 и 29 часа соодветно т.е. со нормално работно време дневно 4-7 дена. Дали е реално?

Ајде да откриеме што треба прво да се спроведе.

1. Каталог на производи

2. Количка

2.1. Попусти

3. Поставување нарачка

3.1. начини за плаќање

3.2. Методи на испорака

Па, прво да го поедноставиме:

Почеток на Bitrix

Секој правилен развој во Bitrix започнува со посебен модул во кој сè ќе се складира и нема да се меша со сè друго.

Развојот на модулот за онлајн продавница започнува со стандарден „празен модул“

креирајте папка локалниво коренот на страницата и креирајте папка во неа модули/NAMESPACEво мојот случај ќе биде ова бинлиз.продажбаЗа да може Bitrix да утврди дека ова е модул, треба да креирате неколку папки и датотеки, сето ова е напишано во курсот Bitrix, но јас ќе напишам точно што правам

креирајте папка инсталирај, датотеки install/index.php, include.php, options.php

/** * Корисник: binliz */ користете Bitrix\Main\Localization\Loc; Локација::loadMessages(__FILE__); if (class_exists("binliz_sale")) ( return; ) класата binliz_sale го проширува CModule ( јавен $MODULE_ID = "binliz.sale"; јавно $MODULE_VERSION = "0.1"; јавен $MODULE_VERSION_DATE = "2016-09-19 $"; MODULE_NAME = „Продажба на модулот на binliz“; јавна $MODULE_DESCRIPTION = „Модул за складирање, кој се користи за автоматско поврзување на класи. Го користи моторот D7."; јавен $MODULE_GROUP_RIGHTS = „N"; јавен $PARTNER_NAME = „binliz"; јавен $PARTNER_URI = "http: //сајт"; јавна функција DoInstall() ( глобална $APPLICATION; RegisterModule ($this->MODULE_ID); ) јавна функција DoUninstall() (глобална $APPLICATION; UnRegisterModule ($this->MODULE_ID); ) )

Тоа е тоа, ајде да одиме на Десктоп > Пазар > Инсталирани решенијаи инсталирајте го нашиот модул, тоа ќе го правиме често, инсталирајќи го и инсталирајќи го за да знаеме со сигурност дека нашиот модул ќе се распореди надвор од кутијата.

Првото нешто што треба да направиме е да ја организираме можноста за создавање директориум во административниот панел; за погодност, ќе го направиме тоа на ист начин како и со Bitrix, т.е. Без да измислиме нова структура, ќе додадеме свои јазичиња со трговскиот каталог на елементите на информативниот блок.

Како да се организира ова? Ајде прво да се обидеме да создадеме табела во која ќе ги складираме нашите информативни блокови кои ќе станат каталози.

КРЕИРАЈ ТАБЕЛА `b_binliz_sale_catalog` (`ID` int(11) НЕ NULL, `IBLOCK_ID` int(11) НЕ NULL, `OFFER_IBLOCK_ID` int(11) НЕ NULL, `IS_CATALOG` int(1) НЕ is_ OFFERS, (1) НЕ NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; ПРОМЕНИ ТАБЕЛА `b_binliz_sale_catalog` ДОДАЈ ПРИМАРЕН КЛУЧ (`ID`), ДОДАЈ ЕДИНСТВЕН КЛУЧ `IBLOCK_ID` (`IBLOCK_ID`), ДОДАЈ ЕДИНСТВЕН КЛУЧ `OFFER_IBLOCK_ID` (`OFFER_IBLOCK_ID`); ПРОМЕНИ ТАБЕЛА `b_binliz_sale_catalog` МОДИФИРАЈ го `ID` int(11) НЕ NULL AUTO_INCREMENT;

Ајде да создадеме претстава за оваа табела во ORM, да креираме папка lib и да ја ставиме датотеката во неа salecatalog.php

Именски простор Binliz\Sale; користете Bitrix\Main, Bitrix\Main\Localization\Loc; Локација::loadMessages(__FILE__); /** * Class SaleCatalogTable * * @package Binliz\Sale **/ class SaleCatalogTable се проширува Main\Entity\DataManager ( /** * Го враќа името на табелата на DB за ентитетот. * * @return стринг */ јавна статичка функција getTableName() ( врати "b_binliz_sale_catalog";) /** * Ја враќа дефиницијата за мапа на ентитет. " => точно, "автоматско комплетирање" => точно, "наслов" => Локација::getMessage("SALE_CATALOG_ENTITY_ID_FIELD"), "IBLOCK_ID" => низа ("data_type" => "цел број", "задолжително" => true, "title" => Loc::getMessage("SALE_CATALOG_ENTITY_IBLOCK_ID_FIELD"), "OFFER_IBLOCK_ID" => низа ("data_type" => "цел број", "задолжително" => точно, "наслов" => Локација: getMessage ("SALE_CATALOG_ENTITY_OFFER_IBLOCK_ID_FIELD"), "IS_CATALOG" => низа ("data_type" => "цел број", "задолжително" => точно, "наслов" => Локација::getMessage("SALE_CATALOG_ERS_ERS_TAFF"), "CATALOG_ERS_TAFFITY" => низа ("тип_податок" => "цел број", "задолжителен" => точно, "наслов" => Локација::getMessage("SALE_CATALOG_ENTITY_IS_OFFERS_FIELD"),),); ))

И можете, во принцип, да ставите локализација lang/ru/lib/salediscount.php

$MESS["SALE_CATALOG_ENTITY_ID_FIELD"] = ""; $MESS["SALE_CATALOG_ENTITY_IBLOCK_ID_FIELD"] = ""; $MESS["SALE_CATALOG_ENTITY_OFFER_IBLOCK_ID_FIELD"] = ""; $MESS["SALE_CATALOG_ENTITY_IS_CATALOG_FIELD"] = ""; $MESS["SALE_CATALOG_ENTITY_IS_OFFERS_FIELD"] = "";

до сега ништо не сум редефинирал, само го ставив фајлот, плочата е креирана, време е да направиме таб и да му дадам методи за работа со него, пошто го имаме Bitrix, има систем за настани, најдобар и правилен начин е да се организираат часови кои ќе бидат прикачени токму на овие настани и ќе ги решаваат нашите проблеми, за ова претпочитав да се водам од принципот една класа, едно решение и самиот конструктор да дефинира на што висиме. Пред сè, ќе го решиме проблемот со идентификување директориуми. За да го направите ова, треба да создадеме таб во делот за уредување на информативниот блок во кој ќе има нашиот знак дека ова е каталог и засега тоа ќе биде доволно, нема да се замараме со трговски понуди додека не можеме ова подоцна. Ајде да создадеме апстрактна класа за настани во која ќе создадеме низа што ги пренесува следните податоци:

модулот на кој висиме, настанот и методот на класа кој е одговорен за него. За да го направите ова, креирајте папка за настани во папката lib и ставете ги нашите настани таму. И така апстрактен час.

Именски простор Binliz\Sale\Events; апстрактна класа Base( заштитена $eventlist = ; јавна конечна функција __construct())( $eventManager = \Bitrix\Main\EventManager::getInstance(); foreach($this->листа на настани како $event)( $eventMethods = get_called_class() . "::".$event["method"]; $eventManager->addEventHandler($event["module"],$event["event"],$eventMethods); ) ) )

И час за работа со инфоблокот:

Именски простор Binliz\Sale\Events; класата SaleCatalogIblockEdit ја проширува Base( заштитена $eventlist = [ ["module"=>"main", "event"=>"onAdminTabControlBegin","method"=>"onAdminTabControlBegin"], ["module"=>"iblock"," event"=>"onAfterIblockAdd","method"=>"onAdminIblock"], ["module"=>"iblock","event"=>"onAfterIblockUpdate","method"=>"onAdminIblock"], ["модул "=>"iblock", "event"=>"OnIBlockDelete", "method"=>"onAdminIblockDelete"], ]; статична јавна функција getApp())( $application = \Bitrix\Main\Application::getInstance() $context = $application->getContext(); $request = $context->getRequest(); $uri = $request->getRequestedPage(); return array("application"=>$application,"context"=> $context,"request"=>$request,"uri"=>$uri); ) јавна функција onAdminTabControlBegin(&$form)( $ells = self::getApp(); if($ells["uri"] = = "/bitrix/admin/iblock_edit.php") ( if($ells["request"]->getQuery("ID")>0) $results = \Binliz\Sale\SaleCatalogTable::GetByIblock($ells[" барање "]->getQuery("ID")); ob_start(); include(__DIR__."/templates/iblock_edit.php"); $str = ob_get_contents(); ob_end_clean(); $form->tabs = низа("DIV" => "BINLIZ_SALE_CATALOG", "TAB" => "Трговски каталог Binliz.Sale", "ICON"=>"main_user_edit", "TITLE"=>"Каталог за поставки", " СОДРЖИНА"=>$str); ) ) јавна функција наAdminIblock($arFields)( $ells = self::getApp(); file_put_contents(__DIR__."/fields.txt",var_export(array($arFields,$ells["request"]->getPostList() ,$ells["request"]->getPost("IS_BINLIZ_CATALOG")),1)); if($arFields["RESULT"]!=false)($ID = $arFields["ID"]; $fields = ["IBLOCK_ID"=> $ID,"IS_CATALOG"=>$ells["request"]->getPost("IS_BINLIZ_CATALOG")=="Y"?1:0]; \Binliz\Sale\SaleCatalogTable::AddByIblock( $ID,$fields); ) ) јавна функција наAdminIblockDelete($ID)( \Binliz\Sale\SaleCatalogTable::DeleteByIblock($ID); ) )

Ајде да ги додадеме нашите функции на моделот на табелата соодветно:

Јавна функција GetByIblock($IBLOCK_ID)( $query = new \Bitrix\Main\Entity\Query(self::getEntity()); $query->setSelect(array("*")); $query->setFilter(низа ("=IBLOCK_ID" => $IBLOCK_ID)); $result = $query->exec(); $ells = $result->fetch(); if(isset($ells["ID"])) врати $ells ; друго врати неточно; ) јавна функција AddByIblock($IBLOCK_ID,$arFields)($query = new \Bitrix\Main\Entity\Query(self::getEntity()); $query->setSelect(array("IBLOCK_ID", "ID")); $query->setFilter(array("=IBLOCK_ID" => $IBLOCK_ID)); $result = $query->exec(); $ells = $result->fetch(); if(isset ($ells["ID"])) self::Update($ells["ID"],$arFields); else $res = self::Add($arFields); ) јавна функција DeleteByIblock($IBLOCK_ID)( $ query = new \Bitrix\Main\Entity\Query(self::getEntity());$query->setSelect(низа ("IBLOCK_ID", "OFFER_IBLOCK_ID", "ID", "IS_CATALOG", "IS_OFFERS")); $query->setFilter(array("=IBLOCK_ID" => $IBLOCK_ID)); $result = $query->exec(); $ells = $result->fetch(); if(isset($ells["ID "]) && $ells["OFFER_IBLOCK_ID"]==null) (self::Delete($ells["ID"]); врати вистина ;))

И датотеката со шаблон со ознака што ја даваме:

Ура, сега имаме работно поле за избор што одредува дали имаме директориум или не.

Содржината на вклучените области се чуваат во посебни PHP или HTML датотеки. Областите за страници или секции се зачувуваат со некоја наставка. На пример, доставените датотеки со производи користат суфикс _inc(На пример, index_inc.php), а областа за вклучување за делот на страницата се зачувува во датотека наречена сектаи додавање на наставка кон неа (на пример, sect_inc.php).

Важно!Датотеката со вклучена област мора да се зачува во истиот директориум како и страницата за која е креирана. Областа за вклучување за дел е во папката на тој дел.

Поврзувањето области во шаблон за дизајн на веб-локација се врши со помош на компонентата Вметнување област за вклучувањеили користејќи ја функцијата .

Наставката што се користи за означување на вклучените области се одредува со опцијата со истото име во поставките на компонентата Вметнување област за вклучување. Компонентата може да се постави не само во шаблонот за дизајн, туку и на страниците на страницата, под услов суфиксот на датотеката да биде поставен различен од оној што се користи во шаблонот.

Една компонента може да се конфигурира само на една од опциите за прикажување опишани погоре. Покрај тоа, тие можат да бидат прикажани на страниците на страницата во согласност со какви било други услови. На пример, само на главната страница на страницата или само за овластени посетители итн.

Забелешка:определена со опција Прикажи вклучена област.

Ако компонентата е ставена во шаблон за дизајн на веб-страница, тогаш информациите од датотекаќе бидат прикажани низ целата страница. Поставувањето на параметарот е достапно само за корисник со права edit_php.

Поставување на вклучената област

За да поставите вклучена област, направете го следново:

  • Отворете шаблон или страница за веб-локација во визуелниот уредник за уредување.
  • Додадете компонента Вметнување област за вклучување (битрикс:главен.вклучи) до шаблонот на страницата (или телото на страницата) и конфигурирајте ги неговите поставки.

Постои ограничување за користење на областите за вклучување при интегрирање во дизајн. Тоа е поврзано со големината доделена за ќелијата во која се наоѓа компонентата. Ако внесениот текст, слика или нешто друго е со поголема големина од просторот доделен за компонентата, тогаш дизајнот ќе „оди“, односно ќе се искриви.

Користењето на областите за вклучување ви овозможува да контролирате повеќе од само текст. Можете да поставите слика во оваа област наместо текст (или компонента Случајна фотографија) и добијте индивидуален приказ на секој дел. Во овој случај, индивидуалноста ќе биде „динамична“, променлива.

Креирајте и уредете област за вклучување

Може да се направи создавање на области:


Слично може да продолжите со уредување на вклучените области:


Внимание!Ако ја користите опцијата како вклучена област од датотека, тогаш треба да проверите дали датотеката е поврзана од системот и не е директно повикана. Ова е направено со помош на следнава линија:
.

Пример за вклучена содржина на датотека:

Светска книга
Сите книги во светот


Вклучете шаблони за областа

Вклучи области се создадени од шаблони зачувани во папки со име /page_templates/:

  • /bitrix/templates/.default/page_templates/ - ако овој шаблон за вклучена област се користи за сите шаблони за дизајн на сајтови;
  • /битрикс/шаблони/<идентификатор шаблона>/page_templates/ - ако се користат посебни шаблони за области за вклучување за шаблонот на страницата.

За да може да се избере шаблон во визуелниот уредувач врз основа на кој се создава област за уредување, во датотеката мора да се додаде листа на шаблони за области што може да се уредуваат .содржина.php.

Датотека .содржина.phpе зачувана во папката /page_templates/ во директориумот на соодветниот шаблон на страницата.

Пример за содржина на датотека:

GetMessage ("стандарден"), "сорт"=>1); $TEMPLATE["page_inc.php"] = Низа ("name"=>GetMessage("page_inc"), "sort"=>2); $TEMPLATE["sect_inc.php"] = Низа ("name"=>GetMessage("sect_inc"), "sort"=>3); ?>

Имајте предвид дека името на шаблонот може да се пренесе како параметар кога се поврзува област што може да се уредува во шаблонот на страницата („TEMPLATE“=>„page_inc.php“ во примерот подолу).


Ако поврзувањето области за уредување се врши со помош на функцијата PHP IncludeFile(), поставен на соодветните места во шаблонот за дизајн, тогаш кодот може да изгледа вака:

$APPLICATION->IncludeFile(substr($APPLICATION->GetCurPage(),
0, strlen($APPLICATION->GetCurPage())-4)."_inc.php", Array(),
Низа("MODE"=>"html", "NAME"=>GetMessage("PAGE_INC"), "TEMPLATE"=>"page_inc.php" ));
?>
$APPLICATION->
IncludeFile($APPLICATION->GetCurDir()."sect_inc.php", Array(), Array("MODE"=>"html",
"NAME"=>GetMessage("SECT_INC"), "TEMPLATE"=>"sect_inc.php" ));
?>