Magento backend - създаване на CRUD модул
Ако сте пропуснали предишната статия, тогава трябва да изтеглите ТАЗИ.
Преконфигуриране
Както винаги, нека започнем с добавяне на файлове/папки към структурата на нашия модул.
Добавете нови настройки към конфигурационния файл (app/code/local/Freaks/Quotes/etc/config.xml )
- adminhtml/layout - сочи към файла с промени в оформлението, по аналогия, както във фронтенда.
- admin/routers - определя как работи маршрутизирането. Тази директива означава, че модулът Freaks_Quotes трябва да се използва при достъп до администраторската част на модула. В параметъра задайте префикса за всички класове, отговорни за работата с бекенда
Друг странен файл се появи в директорията с настройки, нареченаadminhtml.xml. Да видим какво може да се зададе в него
Виждаме, че с негова помощ можете да добавите нов елемент към менюто, като кликнете върху който можем да стигнем до списъка с всички котировки. В директивата на менюто мисля, че всичко е ясно, с изключение на действието. Той казва на Magento кой URL да използва за индексната страница на модула. След "adminhtml/" идва името на контролера в директориятаcontrollers/Adminhtml.
acl е ниво на достъп, което може да се променя в бекенда на Magento -Sytem >Разрешения >Роли. В нашия случай правата се дават или на целия модул, или изобщо не се дават.
Нека създадем файл с оформление за бекенда (app/design/adminhtml/default/default/layout/freaks/quotes.xml )
Тази конфигурация има нова директива - "update". Всичко, което прави, е да посочи кои настройки на манипулатора да се използват тук.
Ние контролираме
Ние създаваме нещо, без което нищо не работи - тук това е контролерът
действията за индексиране, ново, редактиране са подобни. Не усложних кода, като преместих общата логика в отделна функция,защото искам ясно да покажа какво и кой и къде прави. Тези методи просто задават заглавието на страницата, зареждат обекта на оформлението, задават активното меню и показват оформлението.
Още интересна информация се крие в методите delete, save и grid.
Най-простото deleteAction е да получите идентификатора на офертата чрез обекта Request, да го зададете на модела и да се опитате да го изтриете. Ако всичко е минало добре, добавете съобщение за успех към сесията. Ако получим Mage_Core_Exception, това означава, че е хвърлено от разработчиците и съдържа удобен за потребителя текст, така че задаваме неговото обозначение и на сесията. При условие, че е хваната друга грешка, най-вероятно това е логическа или друга грешка, която е разбираема само за разработчиците. Затова извикваме метода logException, който ще запише грешката във файловата система, ако е разрешена вSystem >Програмист >Настройки на регистрационния файл. И накрая пренасочваме потребителя към страницата, от която е дошъл или главната страница на модула.
saveAction върши същата работа с едно малко НО :) приема данни от формуляра и се опитва да запази цитата. Останалата част от процедурата се повтаря.
gridAction е необходим за обработка на AJAX заявки за търсене и сортиране на данни в таблицата. По принцип той зарежда оформлението, създава мрежов блок, който ще създадем малко по-късно, превръща блока в html и го задава като тяло на отговора към обекта Response.
Преструваме се, че работим
Време е да създадете блоковете. Искам да ви зарадвам веднага, не е нужно да пишем html код, разработчиците на Magento се погрижиха за това и им благодаря :)
Нека създадем няколко блокови класа. Нека започнем с блоковете Grid и GridContainer. ОтворетеBlock/Adminhtml/Quotes.php, това ще бъде GridContainer
Всички са тукразбираемо, освен че свойствата на обекта _blockGroup и _controller са много важни. Те задават стойностите, с които Magento след това ще се опита да намери блока Grid. _blockGroup е само името на вашия модул, а контролерът указва пътя (чрез знака "_") спрямо корена на модула, където е вашият Grid. Разглеждайки внимателно структурата на директорията в началото на статията, можете да видите защо има такива стойности тук. Методическата документация можете да намерите ТУК.
Нека създадем блок Grid (Block/Adminhtml/Quotes/Grid.php )
Тук в конструктора задаваме някои параметри, като: сортиране по подразбиране, идентификатор на мрежата в html, използване на технологията AJAX.
_prepareCollection - подготвя колекция от обекти за показване. В нашия случай ние просто вземаме обекта на колекцията за котировки и го предаваме на мрежата.
_prepareColumns - при този метод създаваме колони за таблицата. Всеки тип колона има собствен рендър вapp/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer. Помислете за метода addColumn. Първият параметър на метода е идентификаторът на колоната, втората настройка на нейното показване. В зависимост от рендера може да има повече или по-малко от тях, така че ще разгледаме само основните, ако искате да знаете повече, тогава сте ТУК.
- header - име на колона в таблицата, което се показва на потребителя
- align - позициониране на текст в колона
- filter_index - индекс на стойността в обекта, по който ще се търси колекцията
- индекс - индексът на стойността на обекта, който ще се показва във всеки ред от тази колона
- тип - задава рендера
- truncate - брой знаци за извеждане
- sortable - показва дали колоната може да бъде сортирана
- филтър - показва далитърсене по колона
- ширина - определя ширината
- escape - извиква метода htmlEscape върху стойността
getRowUrl – Връща URL адреса за редактиране на оферта.
getGridUrl - връща URL адреса, към който да се изпращат AJAX заявки.
Е, можете да отидете до вашия модул и да видите много красива маса

Сега нека създадем блокове, отговорни за редактирането и създаването на цитати. Ние използваме само една форма за тези действия. ОтворетеBlock/Adminhtml/Edit.php
Нека да разберем какво става тук. Form_Container, по аналогия с Grid_Container, ще търси клас формуляр, като вземе предвид _blockGroup, _mode и _controller. Единствената разлика е свойството _mode. Името на класа на формуляра ще се формира, както следва:
Ето защо тук трябва да сте особено внимателни. Ако нещо не работи за вас, най-вероятно проблемът е тук.
След това вземаме идентификатора на офертата в заявката, зареждаме модела и го добавяме към регистъра на Magento (регистърът е просто статична собственост в класа Mage, който е масив от обекти и се използва за прехвърляне на обекти между класове, които не са свързани по никакъв начин). Това е необходимо, за да може по-късно да препраща към този цитат в обекта на формуляра. Методът getHeaderText просто показва заглавието на действието в зависимост от това дали цитатът е добавен или редактиран.
Създайте клас формуляр (Block/Adminhtml/Edit/Form.php )
Методът _prepareForm подготвя формата за показване. Да видим какво ще стане там. Взимаме нашата оферта от регистъра, създаваме обект Varien_Data_Form, добавяме един набор от полета към него (в контекста на това развитие вече не е необходимо, но могат да се добавят повече) и полета към него. Ако това е създаването на нова оферта, тогава не се нуждаем от aola id, вземаме това под внимание. Предаване на стойности към формуляраметод setValues. Всичко останало е съвсем логично и ясно от самия код.

Е, създаването на модула приключи, можете да се насладите на добавяне на цитати :) Готовата версия може да изтеглите ТУК.
В следващата статия ще опиша как да създадете атрибут на оферта за продукт и как да го свържете с оферта.