Джаджи в Magento, ET Web Solutions
Когато беше пуснат Magento 1.4, разработчиците от Varien обявиха, че са улеснили работата на своите потребители, като са въвели такава концепция като джаджи (джаджи), но, както винаги, не са предоставили примери как да работят с тях. Следователно, самите програмисти трябваше да се ровят в кода на стандартните модули, за да разберат как работят джаджите. За съжаление, съдейки по това, което виждам в модулите, които се появяват в Magento Connect, много разработчици или не знаят за такъв инструмент, или не са го разбрали, или просто не искат да го използват.
Какво е джаджа?
Виджет е GUI примитив, който има стандартен вид и изпълнява стандартни действия.
Съгласен съм, това определение не блести с конкретика и не е съвсем правилно в случая с Magento, така че ще се опитам да обясня на по-обикновен език какво се нарича джаджа в контекста на нашата платформа. Може би най-лесният начин да направите това е с пример.
Преди Magento 1.4 можете само да подготвите блок и вмъкването му в необходимите страници падаше изцяло на раменете на крайния потребител. Самият потребител ще трябва да потърси манипулатора за тази страница и да го предпише в XML темата, което не е толкова лесно за неподготвен човек, дори ако се опитате да обясните подробно цялата последователност от действия. И това е дори когато има само една страница.
Но с появата на Magento 1.4 се появи нова функция - widgets. В нашия пример блокът с последните новини е просто джаджа - тоест независим блок от информация, който може да бъде вмъкнат на всяка страница, която поддържа тази функционалност. Независимостта се изразява в това, че съдържанието на блока не зависи от останалото съдържание на страницата, на която се планира да бъде поставен.
За да поставите джаджа, потребителят вече няма да ви измъчва с въпроси относно процедурата за инсталиране - целият процес на поставяне на блок се извършва в административния панел и е интуитивен за повечето хора. Но за това в края на статията, но първо трябва да кажете как да направите елементарна джаджа.
Ние поставихме задачата
Все пак блог модулът е ненужно сложен за тази статия, така че нека вземем нещо по-просто. Да кажем изхода на днешната дата на следните страници: главната страница и списъка с продукти. В Латвия, поради особеностите на законодателството, всеки може да направи екранна снимка на продуктовата страница и да отиде с нея в онлайн магазина. И въпреки че цената на артикула можеше да се покачи, магазинът пак щеше да бъде длъжен да продаде артикула на старата цена, тъй като на страницата не беше посочено на коя дата цената е валидна. Следователно с такава проста джаджа можем частично да защитим магазина от прекалено хитри купувачи. Разбира се, това не е панацея и няма да ви спести редактирането на страницата с помощта на Firebug или подобен инструмент, но все пак ще премахне повечето от потенциалните проблеми.
Ще пропусна описанието на процеса на създаване на модул - това не е целта на тази статия и със сигурност вече сте чели за това някъде и най-вероятно знаете как да го направите. Във всеки случай можете да изтеглите пълния изходен код на модула от връзката в края на статията.
Създаване на Widget
app/code/local/ET/SimpleWidget/etc/widget.xml
Целта на този файл е да даде на Magento информация за това какви джаджи има нашия модул и какви данни приемат като параметри. В един модул може да има колкото искате джаджи. Нека да разгледаме най-важните части на файла.
За да получи списък с всички налични уиджети, Magento обработва всички файлове widget.xml (за всички активнимодули) и ги събира всички в едно. Следователно, трябва да дадем на нашата джаджа уникален идентификатор - в нашия случай това еet_date_widget. Трябва незабавно да посочите класа на блока, който съответства на тази джаджа -etsimplewidget/widget, която съответства на класа ET_SimpleWidget_Block_Widget. Трябва също така да посочите модула, към който принадлежи джаджата.
По принцип тук всичко е доста очевидно:label е името на параметъра,visible е неговата видимост.type отговаря за показването на входните стойности и неговите възможни стойности са точно същите като тези, които използвате за изграждане на формуляра в админ панела - текст, избор, множествен избор и т.н. Също така е възможно да създадете свой собствен тип със собствен дисплей и избор. Пример може да бъде намерен в widget.xml на модула Mage_Catalog (например изпълним модул catalog_product_link). След товастойност указва стойността по подразбиране на параметъра. И накрая, за параметри от тип select или multiselect е посочен набор от възможни стойности.
Тук всъщност разгледахме най-голямата разлика между джаджи и обикновени блокове. Сега трябва да създадем самия блок:app/code/local/ET/SimpleWidget/Block/Widget.php
Блокът е елементарен, но трябва да се обърне внимание на някои неща. Първо, ако даден блок се използва като уиджет, той трябва да имплементира интерфейсаMage_Widget_Block_Interface - без това вашият уиджет или няма да бъде показан, или Magento ще покаже подходяща грешка. На второ място, Magento предава стойностите на параметрите към уиджета само преди да извика метода_toHtml(), така че ще трябва да работите с параметри в тази функция. И трето, стойностите на параметрите се предават в свойството на класа_data, така че със сигурност можете да ги съберете заеднопознатия методgetData() или един по един -getTitle() иgetFormat().
Но може би се чудите защо използваме само 2 от 3-те декларирани параметъра в блока. Какво ще кажете за параметъраtemplate ? Както казах по-горе, тази опция е запазена - Magento знае кога и как да я използва.
Сега всичко, което остава, е да създадете шаблоните block.phtml и inline.phtml. Тъй като в тях няма нищо фундаментално различно от шаблоните за празни блокове, няма да затрупвам статията с ненужен код. Нека просто кажем, че block.phtml изобразява времето като блок с червена рамка, а inline.phtml изобразява съдържанието в удебелен шрифт.
Това е всичко, готови сме да преминем към вмъкване на джаджата в страниците.
Вмъкване на джаджи
Лесно е да се досетите, че поставянето на джаджата от потребителя става в административния панел. Но има поне 2 начина да вмъкнете джаджа на желаната страница. Всеки от тях трябва да се използва за собствена цел.
Групово вмъкване
Какво да направите, ако първият метод не ви подхожда. Това обикновено се случва в следните случаи:
За разлика от предишния, този метод ще ви позволи да направите всичко това, но има и своите ограничения. За съжаление, с него няма да можете да вмъкнете джаджа между, да речем, първия и втория абзац на CMS страница - само след цялото съдържание. И второто ограничение е, че няма да можете да вмъкнете джаджата на една конкретна CMS страница (началната страница е изключение). В тези случаи веднага изберете първия метод.
Сега нека да преминем към втория раздел - настройките, специфични за нашата джаджа. Тук можете да видите всички параметри, които сме посочили в widget.xml. Разбира се, всичко с изключение на шаблона, тъй като той вече е изиграл ролята си в първия маркер.


Всичко това работи чудесно, ако трябва да вмъкнете джаджа с еднакви параметри на всички необходими страници. Ако имате нужда от една стойност на параметъра на някои страници и друга на други, трябва да създадете два екземпляра на вашата джаджа.
Затова ви съветвам винаги да имате предвид такава функция на Magento като джаджи. Благодаря за вниманието. О, да, ето обещаните изходни кодове.