Redaktə kataloqunun olmaması php. Emarket səbəti metodunun funksionallığının genişləndirilməsi. Daxil sahəsi yaradın və redaktə edin

Əslində sual mağazanın həyata keçirilməsindən və onu necə qiymətləndirəcəyimdən gedir.

Əvvəlcə real mağazaya, onun necə işlədiyinə, orada hansı funksiyaların həyata keçirildiyinə və onun dəyərinə baxaq.

Beləliklə, Bitrix-də onlayn mağaza 2 nəşrdə həyata keçirilə bilər: kiçik biznes və biznes.

Mağaza üçün əsas fərq nədir?

1. Reklam modulu yoxdur - bu modulun texniki imkanları şübhə altına alına bilər, o, informasiya bloklarında həyata keçirilə bilər və o, tez və yaxşı işləyəcək, modulun özü isə ağırdır, bəzi hallarda ümumiyyətlə məsləhət görülmür;

2. Onlayn mağaza modulunun özü onunla fərqlənir ki, biznesdə malların qiymətləri ilə bağlı heç bir məhdudiyyət yoxdur və kiçik biznesdə yalnız bir anbar var, filiallar yoxdur (sual əksər hallarda lazım olub-olmaması mübahisəlidir) və siz elektron məzmunu sata bilməzsiniz, qalanları mağaza redaksiyalarında eyni şəkildə işləyir.

Əlimizdə olan Bitrix 1C ilə tam inteqrasiya olunub, kiçik biznes anbarlar və fərqli qiymətlər, məsələn, topdansatış və mallar olmadıqda yaxşıdır. Biznes hər hansı bir müəssisə üçün hazır olan canavar dişli bir mağazadır.

Qiyməti isə: 9000 və 19000 nəzərəçarpacaq fərqdir.

Başlanğıc qiyməti 1400, yəni. faktiki olaraq qalan əlavələr müvafiq olaraq 7600 və 17600-dür.

Orta hesabla, əmək birjasında PHP proqramçısının işi saatda 5-10 dollardır, yəni. 130 UAH - 260 UAH. müvafiq olaraq 58 və 29 saat, yəni. normal iş saatları ilə gündə 4-7 gün. Bu realdır?

Əvvəlcə nəyin həyata keçirilməli olduğunu anlayaq.

1. Məhsul kataloqu

2. Səbət

2.1. Endirimlər

3. Sifarişin verilməsi

3.1. Ödəniş üsulları

3.2. Çatdırılma üsulları

Yaxşı, əvvəlcə bunu sadələşdirək:

Bitrix başlanğıcı

Bitrix-də hər hansı bir düzgün inkişaf, hər şeyin saxlanacağı və hər şeyə müdaxilə etməyəcəyi ayrı bir moduldan başlayır.

Onlayn mağaza modulunun inkişafı standart "boş modul" ilə başlayır.

qovluq yaradın yerli saytın kökündə və orada bir qovluq yaradın modullar/NAMESPACE mənim vəziyyətimdə bu belə olacaq binliz.satış Bitrix-in bunun bir modul olduğunu müəyyən etməsi üçün bir neçə qovluq və fayl yaratmalısınız, bunların hamısı Bitrix kursunda yazılmışdır, amma mən nə etdiyimi tam olaraq yazacağam

qovluq yaradın quraşdırın, fayllar install/index.php, include.php, options.php

/** * İstifadəçi: binliz */ Bitrix\Main\Localization\Loc istifadə edin; Loc::loadMessages(__FILE__); əgər (class_exists("binliz_sale")) ( return; ) class binliz_sale CModule genişləndirir ( ictimai $MODULE_ID = "binliz.sale"; ictimai $MODULE_VERSION = "0.1"; ictimai $MODULE_VERSION_DATE = "2016-09-19"; ictimai $ MODULE_NAME = "Module binliz satışı"; = "http: //site" ictimai funksiyası DoInstall() ( qlobal $APPLICATION; RegisterModule($this->MODULE_ID); ) ictimai funksiya DoUninstall() ( qlobal $APPLICATION; UnRegisterModule($this->MODULE_ID); ) )

Budur, gedək Masaüstü > Marketplace > Quraşdırılmış Həllər və modulumuzu quraşdırın, modulumuzun qutudan kənarda yerləşdiriləcəyinə əmin olmaq üçün bunu tez-tez quraşdırıb quraşdıracağıq.

Etməli olduğumuz ilk şey, rahatlıq üçün idarəetmə panelində bir kataloq yaratmaq qabiliyyətini təşkil etməkdir, biz bunu Bitrix ilə eyni şəkildə edəcəyik, yəni. Yeni bir struktur icad etmədən, məlumat blokunun elementlərinə ticarət kataloqu ilə öz nişanlarımızı əlavə edəcəyik.

Bunu necə təşkil etmək olar? Gəlin əvvəlcə kataloqa çevriləcək məlumat bloklarımızı saxlayacağımız bir cədvəl yaratmağa çalışaq.

CƏDVƏL YARADIN `b_binliz_sale_catalog` (`ID` int(11) NULL DEYİL, `IBLOCK_ID` int(11) NULL DEYİL, `OFFER_IBLOCK_ID` int(11) NULL DEYİL, `IS_CATALOG` int(1)` NULL DEYİL, (1) NULL DEYİL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CƏDVƏLİ DEĞİŞTİRİN `b_binliz_sale_catalog` İLKİN AÇAR ƏLAVƏ EDİN (`ID`), UNİKAL AÇAR `IBLOCK_ID` (`IBLOCK_ID`) ƏLAVƏ EDİN UNİKAL AÇAR `OFFER_IBLOCK_ID` (`OFFER_IBLOCK_ID`); CƏDVƏL DEĞİŞTİR `b_binliz_sale_catalog` DƏYİŞTİR `ID` int(11) NULL DEYİL AUTO_INCREMENT;

ORM-də bu cədvəlin təsvirini yaradaq, lib qovluğu yaradaq və faylı ora yerləşdirək salecatalog.php

Namespace Binliz\Sale; Bitrix\Main, Bitrix\Main\Localization\Loc istifadə edin; Loc::loadMessages(__FILE__); /** * Class SaleCatalogTable * * @package Binliz\Sale **/ class SaleCatalogTable Main\Entity\DataManager-i genişləndirir ( /** * Müəssisə üçün DB cədvəlinin adını qaytarır. * * @return string */ ictimai statik funksiya getTableName() () return "b_binliz_sale_catalog" ) /** * obyekt xəritəsinin tərifini qaytarır * * @return massivi */ ictimai statik funksiya getMap() ( return array("ID" => array("data_type" => "integer", "primary. " => true, "autocomplete" => true, "title" => Loc::getMessage("SALE_CATALOG_ENTITY_ID_FIELD"),), "IBLOCK_ID" => array("data_type" => "tam ədəd", "tələb olunur" => doğru, "title" => Loc::getMessage("SALE_CATALOG_ENTITY_IBLOCK_ID_FIELD"), "OFFER_IBLOCK_ID" => massiv("data_type" => "integer", "lazım olunur" => true, "title" => Loc: getMessage("SALE_CATALOG_ENTITY_OFFER_IBLOCK_ID_FIELD"), "IS_CATALOG" => massiv("data_type" => "integer", "tələb olunur" => true, "title" => Loc::getMessage("SALE_CATALOG_ENTITY_OFFER_IBLOCK_ID_FIELD"), "IS_CATALOG" => massiv("data_type" => "tam ədəd", "tələb olunur" => true, "title" => Loc::getMessage("SALE_CATALOG_ENTITY_IS_OFFERS_FIELD"),),);

) ) Və siz, prinsipcə, lokalizasiya qoya bilərsiniz

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"] = "";

asılı olduğumuz modul, hadisə və buna cavabdeh olan sinif metodu. Bunun üçün lib qovluğunda hadisələr qovluğu yaradıb hadisələrimizi oraya yerləşdirəcəyik. Və beləliklə abstrakt sinif.

Namespace Binliz\Sale\Events;

mücərrəd sinif Base( qorunan $eventlist = ; ictimai yekun funksiya __construct())( $eventManager = \Bitrix\Main\EventManager::getInstance(); foreach($this->hadisə siyahısı $event olaraq)( $eventMethods = get_called_class() "::".$event["method"]; $eventManager->addEventHandler($event["module"],$eventMethods) )

Və infoblokla işləmək üçün bir sinif:

Namespace Binliz\Sale\Events;

İctimai funksiya GetByIblock($IBLOCK_ID)( $query = yeni \Bitrix\Main\Entity\Query(self::getEntity()); $query->setSelect(array("*")); $query->setFilter(massiv) ("=IBLOCK_ID" => $IBLOCK_ID)); $ells = $query->exec(); if(isset($ells["ID"])); ; else return false ) ictimai funksiya AddByIblock($IBLOCK_ID,$arFields)( $query = new \Bitrix\Main\Entity\Query(self::getEntity()); $query->setSelect("IBLOCK_ID", "ID")); $query->setFilter(array("=IBLOCK_ID" => $IBLOCK_ID)); $ells = $result->exec(); ["ID"])) self::Update($ells["ID"],$arFields); else $res = self::Add($arFields) ictimai funksiyası DeleteByIblock($IBLOCK_ID)( $ query = new \Bitrix); \Main\Entity\Query(self::getEntity()); (array("=IBLOCK_ID" => $IBLOCK_ID) $nəticə = $query->exec(); if(isset($ells["ID"])); ells["OFFER_IBLOCK_ID"]==null) (self::Delete($ells["ID"]); doğru qaytar ;))

Və çıxardığımız bir onay işareti olan şablon faylı:

Hurray, indi bizim kataloqumuzun olub-olmadığını müəyyən edən işlək onay qutumuz var.

Daxil edilmiş sahələrin məzmunu ayrıca PHP və ya saxlanılır HTML faylları. Səhifələr və ya bölmələr üçün sahələr bəzi şəkilçi ilə yadda saxlanılır. Məsələn, təchiz edilmiş məhsul faylları şəkilçidən istifadə edir _inc(Məsələn, index_inc.php) və sayt bölməsi üçün daxiletmə sahəsi adlı faylda saxlanılır təriqət və ona şəkilçi əlavə etmək (məsələn, sect_inc.php).

Vacibdir! Daxil edilmiş sahə faylı yaradıldığı səhifə ilə eyni kataloqda saxlanmalıdır. Bölmə üçün daxiletmə sahəsi həmin bölmənin qovluğundadır.

Veb sayt dizayn şablonunda sahələri birləşdirən komponentdən istifadə etməklə həyata keçirilir Daxil olan bölgə daxil edilir və ya funksiyadan istifadə etməklə.

Daxil edilmiş əraziləri təyin etmək üçün istifadə olunan şəkilçi komponent parametrlərində eyni adın seçimi ilə müəyyən edilir Daxil olan bölgə daxil edilir. Komponent yalnız dizayn şablonunda deyil, həm də sayt səhifələrində yerləşdirilə bilər, bir şərtlə ki, fayl şəkilçisi şablonda istifadə olunandan fərqli təyin edilməlidir.

Bir komponent yuxarıda təsvir edilən ekran seçimlərindən yalnız birinə konfiqurasiya edilə bilər. Bundan əlavə, onlar istənilən digər şərtlərə uyğun olaraq saytın səhifələrində göstərilə bilər. Məsələn, yalnız saytın əsas səhifəsində və ya yalnız səlahiyyətli ziyarətçilər üçün və s.

Qeyd: variantı ilə müəyyən edilir Daxil olan ərazini göstərin.

Komponent vebsayt dizayn şablonunda yerləşdirilibsə, o zaman məlumat fayldan bütün saytda nümayiş olunacaq. Parametri təyin etmək yalnız hüquqları olan istifadəçi üçün mümkündür edit_php.

Daxil sahəsinin yerləşdirilməsi

Daxil sahəsini yerləşdirmək üçün aşağıdakıları edin:

  • Redaktə etmək üçün sayt şablonu və ya səhifə açın vizual redaktor.
  • Komponent əlavə edin Daxil olan bölgə daxil edilir (bitrix:main.include) sayt şablonuna (və ya səhifənin əsas hissəsinə) daxil edin və onun parametrlərini konfiqurasiya edin.

Dizayna inteqrasiya edərkən daxil edilmiş sahələrdən istifadə etmək üçün məhdudiyyət var. Bu, komponentin yerləşdiyi hüceyrə üçün ayrılmış ölçü ilə bağlıdır. Daxil edilmiş mətn, şəkil və ya başqa bir şey komponent üçün ayrılmış yerdən daha böyükdürsə, dizayn "gedəcək", yəni təhrif ediləcək.

Daxil edilmiş sahələrdən istifadə yalnız mətndən daha çoxunu idarə etməyə imkan verir. Bu sahəyə mətn (və ya komponent) əvəzinə şəkil yerləşdirə bilərsiniz Təsadüfi foto) və hər bölmənin fərdi görünüşünü əldə edin. Bu vəziyyətdə fərdilik "dinamik", dəyişkən olacaqdır.

Daxil sahəsi yaradın və redaktə edin

Daxil olan sahələrin yaradılması həyata keçirilə bilər:


Siz eyni şəkildə daxil edilmiş sahələri redaktə etməyə davam edə bilərsiniz:


Diqqət! Seçimi daxil edilmiş sahə kimi istifadə etsəniz fayldan, sonra faylın sistemdən qoşulduğunu və birbaşa çağırılmadığını yoxlamaq lazımdır. Bu, aşağıdakı xəttdən istifadə etməklə edilir:
.

Daxil olan faylın məzmununa nümunə:

Dünya Kitabı
Dünyadakı bütün kitablar


Ərazi Şablonlarını daxil edin

Daxil edilmiş sahələr /page_templates/ adlı qovluqlarda saxlanılan şablonlardan yaradılmışdır:

  • /bitrix/templates/.default/page_templates/ - bu daxil edilmiş sahə şablonu bütün sayt dizayn şablonları üçün istifadə olunursa;
  • /bitrix/şablonlar/<идентификатор шаблона>/page_templates/ - əgər sayt şablonu ayrıca daxiletmə sahəsi şablonlarından istifadə edirsə.

Vizual redaktorda redaktə edilə bilən sahənin yaradıldığı şablonu seçə bilmək üçün fayla redaktə edilə bilən sahələr üçün şablonların siyahısı əlavə edilməlidir. .content.php.

Fayl .content.php müvafiq sayt şablonunun kataloqunda /page_templates/ qovluğunda saxlanılır.

Məsələn fayl məzmunu:

GetMessage("standart"), "sort"=>1); $TEMPLATE["page_inc.php"] = Array("name"=>GetMessage("page_inc"), "sort"=>2); $TEMPLATE["sect_inc.php"] = Array("name"=>GetMessage("sect_inc"), "sort"=>3); ?>

Nəzərə alın ki, şablon adı sayt şablonunda redaktə edilə bilən sahəni birləşdirərkən parametr kimi ötürülə bilər (aşağıdakı nümunədə "TEMPLATE"=>"page_inc.php").


Əgər redaktə edilə bilən əraziləri ilə əlaqələndirirsinizsə PHP istifadə edərək funksiyaları IncludeFile(), dizayn şablonunda müvafiq yerlərə yerləşdirilir, onda kod belə görünə bilər:

$APPLICATION->IncludeFile(substr($APPLICATION->GetCurPage(),
0, strlen($APPLICATION->GetCurPage())-4)."_inc.php", Array(),
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" ));
?>

Tez-tez belə bir vəziyyət yaranır ki, malların səbətə əlavə edilməsindən məsul olan emarket basket() metodunun funksionallığını genişləndirmək lazımdır. Sistem versiyasında 2.8.4.3 və metodda aşağı səbət Bu hərəkəti fərdiləşdirmək üçün hadisə hələ qeydə alınmayıb, buna görə də nümunəmizdəki problemi həll etmək üçün səbət metodunu fərdi fayla köçürəcəyik.

Tapşırıq: Səbətə məhsul əlavə edərkən, alıcıya səbətə əlavə edəcəyi məhsul haqqında kiçik bir şərh buraxmağa icazə vermək lazımdır, bu şərh sifariş parametrlərinə baxarkən inzibati hissədə də görünməlidir; Həmçinin, biz yeni metodumuza istənilən sifariş elementinin sayını bir dəfə artırmağa və ya azaltmağa imkan verəcək funksionallıq əlavə edəcəyik.

Həlli: Fayldan səbət metodu kodunu köçürək __purchasing.php, fayl siniflər/modullar/emarket/__custom.php və metodun adını dəyişdirin səbət_xüsusi. Yeni üsulda xətt:

$order = self::getBasketOrder(! in_array($mode, array("qoymaq", "silmək"))));

dəyişdirilməlidir:

$order = $this -> getBasketOrder (! in_array ($mode , massiv ( "qoymaq", "silmək" )));

Xəttdən sonra:

if ($itemType == "element" ) (

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

bu kod sahədən verilən dəyəri sifariş elementinə əlavə edəcək dop_info.

Hər hansı bir sifariş elementinin miqdarını artırmaq və ya azaltmaq üçün funksionallığı konfiqurasiya etmək üçün aşağıdakıları etməlisiniz:

sətirdən sonra:

$options = getRequest("seçimlər");

əlavə edin:

$mode_change = (int) getRequest("dəyişiklik_maddəsi");

və həmçinin sətirdən sonra:

$miqdar = $miqdar?

əlavə edin:

$miqdar : ($orderItem -> getAmount() + 1 );

əgər ($rejim_dəyişikliyi ) $miqdar = ($rejim_dəyişikliyi == 1 ) ? $orderItem -> getAmount () + 1 : $orderItem -> getAmount () - 1 ; TPL şablon mühərrikinin nümunəsindən istifadə etsək, şablonda istifadə edildikdə tpls/emarket/default.tpl, blokda

+ -

sifariş_elementi

, bağlantılar:

düymələri əlavə edə biləcəyiniz hər hansı bir sifarişin sayını bir dəfə artıra və ya azalda bilərsiniz.

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

massiv("səbət_xüsusi" )); ?> Sayt şablonlarında səbətə məhsul əlavə etmək üçün forma yaradılmalıdır, forma hərəkəti standartdır, istisna olmaqla, səbət metodu əvəzinə basket_custom göstərilməlidir. Siz həmçinin formanın özünə giriş əlavə etməlisiniz: İnzibati hissədə, modulda Məlumat Şablonları redaktə üçün məlumat növünü açmalısınız Sifariş verin

, sonunda əlavə edərək xml təqdimatını əldə edin

ünvan çubuğu brauzer: .xml Alınan məlumatlar təxminən aşağıdakı blokdan ibarət olacaq:"Sifariş adları"

field-type-id= "12" visible= "görünən" guide-id= "73" > "Çox seçimli açılan siyahı" data-type= "əlaqə" çoxlu= "çoxlu" /> hansında guide-id="73" dop_info, sonra linkdən istifadə edərək redaktə üçün type_id = 73 ilə məlumat növünü açın /admin/data/type_edit/73/. "Ad Xüsusiyyətləri" qrupunda sətir identifikatoru ilə String tipli başqa bir sahə əlavə edin . Saxlanılan dəyəri göstərmək üçün sifarişə ətraflı baxarkən fayldan bəzi şablonları yenidən təyin edəcəyik\styles\skins\mac\data\modules\emarket\order-edit.xsl

, daha dəqiq desək, dop_info sahəsindən dəyəri çıxararaq, sifariş elementinin adına əlavə edəcəyik. Sifarişin bu hissəsini həyata keçirmək üçün faylı əlavə edin:\styles\skins\mac\data\modules\emarket\form.modify.custom.xsl
aşağıdakı məzmunla:"http://www.w3.org/1999/XSL/Transform" xmlns:xlink= "http://www.w3.org/TR/xlink" >>
"obyekt" />

mode= "sifariş-maddə-adı" >

Əməliyyat