Как создать простой модуль "Hello World" в Magento?
как можно сделать следующее в Magento?
отображение сообщения "Hello World" с использованием подхода контроллера/представления/модели. Так что, если я пошел в
http://example.com/myControllerОн покажет строку "Hello World". Возможность показать эту строку в шаблоне моего сайта (например, верхний и Нижний колонтитулы и т. д.) будет бонус.как я могу добавить метод в контроллер (или контроллер, если это необходимо), который взаимодействует с моделью, и выполняет запрос
Select * FROM articles where id='10'и возвращает строку (содержащую столбцыid, title, content) к контроллеру? А затем используйте регулятор, чтобы включить представление, которое будет отображать эту строку. Так будетhttp://example.com/myController/show_row(или что-то подобное) будет отображать строку в представлении. (Не нужно быть причудливым, простоecho $row->id;или что-то подобное будет работать.)
любая другая информация о структуре кода Magento также будет очень полезна.
3 ответов:
прежде всего, я настоятельно рекомендую вам купить PDF / Электронная книга от PHP Architect. Это US$20, но это единственный простой ресурс "вот как работает Magento", который я смог найти. Я тоже начал писать Magento учебники на моем собственном сайте.
во-вторых, если у вас есть выбор, и вы не являетесь опытным программистом или не имеете доступа к опытному программисту (в идеале в PHP и Java),выбрать другой телега. Magento хорошо спроектирован, но он был спроектирован как решение для корзины покупок, которое другие программисты могут создавать модули поверх. Это не было разработано, чтобы быть легко понятым людьми, которые умны, но не являются программистами.
в-третьих, Magento MVC очень отличается от Ruby на Rails,Джанго,CodeIgniter,CakePHP и т. д. Модель MVC, которая популярна среди разработчиков PHP в эти дни. Я думаю это основано на Зенд модель, и все это очень похоже на Java OOP. Есть два контроллеры, о которых вам нужно беспокоиться. Контроллер модуля / frontName, а затем контроллер MVC.
переопределение существующих классов. То, что я покрываю здесь создания новая функциональность, не переопределяя. Имейте это в виду, когда вы смотрите на примеры кода там.я начну с вашего первого вопроса, показывая вам, как настроить контроллер/маршрутизатор для ответа на определенный URL. Это будет небольшой роман. Я, возможно, позже для модели/шаблона темы, но сейчас, я не. Тем не менее я буду коротко говорить на ваш вопрос по SQL.
Magento использует ЕАВ архитектура базы данных. По возможности старайтесь использовать объекты модели, которые предоставляет система, чтобы получить необходимую информацию. Я знаю, что все это есть в таблицах SQL, но лучше не думать о захвате данных с помощью необработанных SQL-запросов, или вы сойдете с ума.
окончательный отказ от ответственности. Я использую Magento около двух или трех недель, поэтому будьте бдительны. Это упражнение, чтобы сделать это прямо в моей голове столько, сколько это поможет переполнение стека.
создать модуль
все дополнения и настройки в Magento выполняются через модули. Итак, первое, что вам нужно сделать, это создать новый модуль. Создайте XML-файл в
app/modulesназваны следующим образомcd /path/to/store/app touch etc/modules/MyCompanyName_HelloWorld.xml<?xml version="1.0"?> <config> <modules> <MyCompanyName_HelloWorld> <active>true</active> <codePool>local</codePool> </MyCompanyName_HelloWorld> </modules> </config>MyCompanyName-это уникальное пространство имен для ваших модификаций, оно не должно быть именем вашей компании, но это рекомендуемое соглашение my magento.
HelloWorld- имя вашего модуль.очистить кэш приложения
теперь, когда файл модуля находится на месте, нам нужно сообщить об этом Magento (и проверить нашу работу). В приложении администратора
- перейдите в System - >Cache Management
- выберите Обновить в меню все кэш
- нажмите Сохранить настройки кэша
теперь мы убедимся, что Magento знает о модуле
- перейти к Система->Конфигурация
- Дополнительные
- в поле" отключить вывод модулей "найдите новый модуль с именем"MyCompanyName_HelloWorld"
если вы можете жить с замедлением производительности, вы можете отключить кэш приложений во время разработки/обучения. Нет ничего более неприятного, чем забыть очистить кэш и задаться вопросом, почему ваши изменения не отображаются.
настройки каталога структура
Далее, нам нужно создать структуру каталогов для модуля. Вам не понадобятся все эти каталоги, но теперь нет никакого вреда в их настройке.
mkdir -p app/code/local/MyCompanyName/HelloWorld/Block mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers mkdir -p app/code/local/MyCompanyName/HelloWorld/Model mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper mkdir -p app/code/local/MyCompanyName/HelloWorld/etc mkdir -p app/code/local/MyCompanyName/HelloWorld/sqlи добавить файл конфигурации
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xmlи внутри файла конфигурации добавьте следующее, что по существу является "пустой" конфигурацией.
<?xml version="1.0"?> <config> <modules> <MyCompanyName_HelloWorld> <version>0.1.0</version> </MyCompanyName_HelloWorld> </modules> </config>упрощая вещи, этот файл конфигурации позволит вам сказать Magento, какой код вы хотите бежать.
настройки маршрутизатора
Далее, нам нужно настроить роутеры модуля. Это позволит системе знать, что мы обрабатываем любые URL-адреса в виде
http://example.com/magento/index.php/helloworldИтак, в файле конфигурации добавьте следующий раздел.
<config> <!-- ... --> <frontend> <routers> <!-- the <helloworld> tagname appears to be arbitrary, but by convention is should match the frontName tag below--> <helloworld> <use>standard</use> <args> <module>MyCompanyName_HelloWorld</module> <frontName>helloworld</frontName> </args> </helloworld> </routers> </frontend> <!-- ... --> </config>то, что вы говорите здесь, - это "любой URL-адрес с передним именем helloworld ...
http://example.com/magento/index.php/helloworldследует использовать контроллер frontName MyCompanyName_HelloWorld".
так, с выше конфигурации на месте, когда вы загружаете страницу helloworld выше, вы получите 404 страницы. Это потому, что мы не создали файл для нашего контроллера. Давайте сделаем это сейчас.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.phpтеперь попробуйте загрузить страницу. Прогресс! Вместо 404 вы получите исключение PHP / Magento
Controller file was loaded but class does not existИтак, откройте файл, который мы только что создали, и вставьте следующий код. Имя класса должно быть основано на имени, которое вы указали в своем обращать в бегство.
<?php class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{ public function indexAction(){ echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here"; } }что мы просто установки контроллера/frontName. Это контроллер по умолчанию и действие по умолчанию модуля. Если вы хотите добавить контроллеры или действия, вы должны помнить, что первая часть дерева URL Magento неизменна, они всегда будут идти таким образом
http://example.com/magento/index.php/frontName/controllerName/actionNameтак что если вы хотите, чтобы соответствовать этому url
http://example.com/magento/index.php/helloworld/fooвы должны будете иметь FooController, который вы можете сделать таким образом :
touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php<?php class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{ public function indexAction(){ echo 'Foo Index Action'; } public function addAction(){ echo 'Foo add Action'; } public function deleteAction(){ echo 'Foo delete Action'; } }обратите внимание, что контроллер по умолчанию IndexController и действие по умолчанию indexAction могут быть неявными, но должны быть явными, если что-то придет после него. Так что
http://example.com/magento/index.php/helloworld/fooбудет соответствовать контроллеру FooController и действию indexAction, а не действию Fooaction IndexController. Если вы хотите иметь fooAction, в контроллере IndexController вы должны вызвать этот контроллер явно следующим образом :http://example.com/magento/index.php/helloworld/index/fooпотому что второй часть url-адреса является и всегда будет controllerName. Это поведение является наследованием Zend Framework, входящей в комплект Magento.теперь вы должны быть в состоянии поразить следующие URL-адреса и увидеть результаты ваших Эхо-заявлений
http://example.com/magento/index.php/helloworld/foo http://example.com/magento/index.php/helloworld/foo/add http://example.com/magento/index.php/helloworld/foo/deleteИтак, это должно дать вам основную идею о том, как Magento отправляет контроллер. Отсюда я рекомендовал ткнуть в существующие классы контроллеров Magento, чтобы увидеть, как должны быть модели и система шаблонов / макетов используемый.
я боролся с Magento в течение последнего месяца или около того, и я все еще пытаюсь понять это. Итак,это случай, когда слепой ведет слепого. В документации мало что есть, и форум/Вики в лучшем случае хаотичен. Мало того, есть несколько решений, которые либо устарели, либо далеки от оптимальных. Я не уверен, если у вас есть проект или просто пытается выяснить это, но это, вероятно, проще, если вы начали с изменения существующей функциональности, а не создание чего-то совершенно нового. Для этого я бы определенно пошел с "рекомендуемыми статьями для разработчиков" в вики. Новый способ оплаты был настоящим откровением.
для отладки я определенно рекомендую С помощью FirePHP и глядя на ваш HTML-код, когда что-то идет не так. Метод отладки ole echo на самом деле не работает так хорошо.
общая архитектура настолько умопомрачительно сложна, что даже если бы я полностью понял ее, я бы нужно написать книгу, чтобы покрыть его. Лучшее, что я могу сделать, это дать вам совет, который я хотел бы, чтобы кто-то дал мне, когда я впервые начал...
держаться подальше от основных файлов. Не изменяйте их, вместо этого напишите свой собственный модуль и переопределите то, что вам нужно.
Magento использует конфигурационные файлы, состоящие из XML, чтобы решить, что ему нужно сделать. Чтобы заставить его запускать свои собственные вещи, а не основные функции, вам нужен правильный xml. К сожалению, нет руководства о том, как построить вам XML; вы нужно посмотреть примеры и сделать некоторые серьезные испытания. Чтобы усложнить ситуацию, содержание этих файлов в значительной степени зависит от регистра. Однако, если вы овладеете ими, вы можете переопределить любую часть базовой функциональности, которая делает очень мощную систему.
Magento использует такие методы, как
Mage::getModel('mymodel'),Mage::getSingleton('mysingleton'),Mage::helper('myhelper')для возврата объектов определенных классов. Он находит их по умолчанию в своем основном пространстве имен. Если вы хотите, чтобы он использовал свой собственный, вам нужно переопределить их в своемconfig.xmlфайл.имя ваших классов должно соответствовать папке, в которой они находятся.
многие объекты в Magento в конечном итоге расширяют то, что называется
Varien_Object. Это класс общего назначения (вроде швейцарского армейского ножа), и его цель в жизни-позволить вам определять свои собственные методы/переменные на лету. Например, вы увидите, что он используется как прославленный массив для передачи данных из одного метода в другой.во время разработки убедитесь, что вы кэширование нетрудоспособный. Это сделает magento мучительно медленным, но это избавит вас от большой травмы головы (от удара по вашему столу).
вы увидите
$thisиспользуется большое. Это означает другой класс В зависимости от того, какой файл вы видите его.get_class($this)- ваш друг, особенно в сочетании с FirePHP.запишите все на бумаге. Много. Есть бесчисленное множество маленьких фактов, что тебе понадобится 1-2 дня после того, как вы столкнетесь с ними.
Magento любит ОО. Не будет удивлен, если трассировка метода проходит через 5-10 различных классов.
прочитайте руководство дизайнера здесь. Это предназначено в основном для графических дизайнеров, но вы нужно его, чтобы понять, где и почему выход из вашего модуля будет в конечном итоге. Для этого не забудьте включить "подсказки пути к шаблону" в разделе разработчика панели администратора.
есть еще, но я остановлюсь здесь, прежде чем это превратится в диссертацию.
Я скорее рекомендую Mage2Gen, это поможет вам создать шаблон, и вы можете просто сосредоточиться на основной бизнес-логике. это просто помогает ускорить процесс.
Comments