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. Всичко останало е съвсем логично и ясно от самия код.

magento

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

В следващата статия ще опиша как да създадете атрибут на оферта за продукт и как да го свържете с оферта.