Как я создаю простое 'Привет Мировой' модуль в Magento?

Если вы хотите сопоставить текст, который содержит двойные кавычки, пожалуйста, следуйте здесь:

текст:

"abc"

текст в VBA:

"""" & "abc" & """" (4 double quotation marks are necessary)

Спасибо .

302
задан 22 revs, 10 users 79% 13 June 2018 в 21:25
поделиться

3 ответа

Прежде всего я настоятельно рекомендую, чтобы Вы купили PDF/электронная книга от Архитектора PHP . Это - 20 долларов США, но является единственным простым, "Вот то, как Magento работает" ресурс, который я был в состоянии найти. Я также начал писать учебные руководства Magento на моем собственном сайте .

1142-секундный, если Вы имеете выбор и не являетесь опытным программистом или не имеют доступа к опытному программисту (идеально в PHP и Java), выбор другая корзина . Magento хорошо спроектирован, но он был спроектирован, чтобы быть решением для корзины, сверху которого другие программисты могут создать модули. Это не было спроектировано, чтобы быть понятным людям, которые умны, но не являются программистами.

В-третьих, Magento MVC очень отличается от Ruby on Rails , Django, CodeIgniter, CakePHP, и т.д. модель MVC, это популярно у разработчиков PHP в эти дни. Я думаю, что это основано модель Zend , и все это - очень подобный ООП Java. Существует два контроллеры, которыми Вы должны быть обеспокоены. module/frontName контроллер и затем контроллер MVC.

Четвертый, само приложение Magento создается с помощью той же системы модуля, которую Вы будете использовать, таким образом введение по абсолютному адресу вокруг базового кода является полезной тактикой изучения. Кроме того, многое из того, что Вы будете делать с Magento, переопределение существующие классы. Что я покрываю, вот создание новая функциональность, не переопределение. Имейте это в виду при рассмотрении примеров кода там.

я собираюсь запуститься с Вашего первого вопроса, показывая Вам, как установить контроллер/маршрутизатор для ответа на определенный URL. Это будет маленьким романом. Я мог бы иметь время спустя для связанных тем модели/шаблона, но на данный момент, я не делаю. Я буду, однако, кратко говорить с Вашим вопросом о SQL.

Magento использует архитектура базы данных EAV. Каждый раз, когда возможно, попытайтесь использовать объекты модели, которые система обеспечивает для получения информации, в которой Вы нуждаетесь. Я знаю, что это - все там в таблицах SQL, но лучше не думать о захвате данных с помощью необработанных SQL-запросов, или Вы сойдете с ума.

Окончательная правовая оговорка. Я использовал Magento в течение приблизительно двух или трех недель, таким образом, принцип "качество на риск покупателя". Это - осуществление для получения этого прямо в моей голове так же, как она должна помочь Stack  Переполнение.

Создают модуль

, Все дополнения и настройки к Magento сделаны через модули. Так, первая вещь, которую необходимо будет сделать, создают новый модуль. Создайте XML-файл в [1 115] названный следующим образом

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 является уникальным пространством имен для Ваших модификаций, это не должно быть название Вашей компании, но что рекомендуемая конвенция мой магнето. HelloWorld название Вашего модуля.

Очищают кэш приложения

Теперь, когда файл модуля существует, мы должны будем сообщить Magento об этом (и проверить нашу работу). В приложении администрирования

  1. Переходят к Системе-> Управление кэшем
  2. , Избранное Обновление из меню
  3. All Cache Нажимает Save Cache settings

Now, мы удостоверяемся, что Magento знает о модуле

  1. , Переходят к Системе->, Конфигурация
  2. Нажимает Advanced
  3. In поле установки "Disable modules output", ищет Ваш новый модуль, названный "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 в форме [1 157]

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 с frontName 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";
    }
}

то, Что у нас есть просто установка, является module/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. Это поведение является наследованием Платформы Зенда, связанной в 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, чтобы видеть, как должны использоваться модели и система шаблона/расположения.

534
ответ дан β.εηοιτ.βε 23 November 2019 в 01:25
поделиться

Я боролся с Magento в течение прошлого месяца или так и я все еще пытаюсь понять это. Таким образом, это - случай слепого продвижения слепых. Существует мало в способе документации, и форум/Wiki хаотичен в лучшем случае Не только, что, но и существует несколько решений, которые или устарели или совсем не оптимальны. Я не уверен, есть ли у Вас проект или просто пытающийся понять это, но, вероятно, легче, если Вы запустили с изменения существующей функциональности в противоположность созданию чего-то абсолютно нового. Для этого я определенно пошел бы с "Рекомендуемыми статьями для разработчиков" в Wiki. Новый способ оплаты каждый был реальным разоблачением.

Для отладки я определенно рекомендовал бы FirePHP использования и рассмотрение Вашего источника HTML, когда что-то идет не так, как надо. Метод отладки эха ole действительно не работает все настолько хорошо.

общая архитектура так отупляющим образом сложна, что, даже если бы я полностью понял это, я должен был бы записать книгу для покрытия ее. Лучшее, которое я могу сделать, дают Вам совет, мне жаль, что кто-то не дал мне, когда я сначала запустил...

Избегают базовых файлов. Не изменяйте их, вместо этого пишите свой собственный модуль и переопределяйте то, в чем Вы нуждаетесь.

Magento использует файлы конфигурации, состоящие из XML для решения то, что он должен сделать. Чтобы заставить это выполнять Ваш собственный материал в противоположность базовой функциональности, Вам нужен корректный xml. К сожалению, нет никакого руководства по тому, как создать Вас XML; необходимо посмотреть на примеры и сделать некоторое серьезное тестирование. Для усложнения вещей, содержание этих файлов в основном чувствительно к регистру. Однако при освоении их, можно переопределить любую часть основной функциональности, которая делает для очень мощной системы.

Magento использует методы как Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') к эхо-сигналам определенных классов. Это находит их по умолчанию в его базовом пространстве имен. Если Вы хотите, чтобы это использовало Ваше собственное, необходимо переопределить их в Вашем config.xml файл.

название Ваших классов должно соответствовать папке, в которой они находятся.

Много объектов в Magento в конечном счете расширяет что-то позвонившее Varien_Object. Это - класс общего назначения (отчасти как швейцарский нож), и его цель в жизни состоит в том, чтобы позволить Вам определять свои собственные методы/переменные на лету. Например, Вы будете видеть, что это раньше в качестве прославленного массива передавало данные от одного метода до другого.

Во время разработки удостоверяются Вы, кэширование отключено. Это заставит магнето мучительно замедлиться, но это сохранит Вас много травмы головы (от стука по нему на Вашем столе).

Вы будете видеть $this использоваться много. Это означает другой класс в зависимости от того, какой файл Вы видите его. get_class($this) Ваш друг, особенно в сочетании с FirePHP.

Кратко записывают вещи на бумаге. Много. Существуют бесчисленные небольшие фактоиды, в которых Вы собираетесь нуждаться спустя 1-2 дня после обнаружения с ними.

Magento любит OO. Не удивляйтесь, если трассировка метода берет Вас через 5-10 различных классов.

Read руководство разработчика здесь . Это предназначено главным образом для графических разработчиков, но Вы потребность это для понимания, где и почему вывод от модуля закончится. Поскольку это не забывает включать "Подсказки пути к шаблону" в разделе разработчика панели администрации.

существует больше, но я остановлюсь здесь, прежде чем это превращается в диссертацию.

38
ответ дан Community 23 November 2019 в 01:25
поделиться

Я пытался сделать свой модуль из magaplaza привет мировым учебным руководством, но что-то пошло не так, как надо. Я импортировал код этого модуля https://github.com/astorm/magento2-hello-world из GitHub, и он работал. от того модуля я создал его подкатегории категорий ajax избранный Модуль холмов отбрасывания. После установки его в aap/code каталоге Вашей magento2 установки следуют за этим URL.. http://www.example.com/hello_mvvm/hello/world можно загрузить его код отсюда https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns и поместить его в aap/code папку. чем выполненный эти команды...

php bin/magento setup:update
php bin/magento setup:static-content:deploy -f
php bin/magento c:c

Теперь можно проверить функциональность модуля со следующим URL http://{{www.example.com}}/hello_mvvm/hello/world

0
ответ дан 23 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: