Jak stworzyć prosty moduł "Hello World" w Magento?

Jak można wykonać następujące czynności w Magento?

  • Wyświetla komunikat "Hello World" za pomocą podejścia kontroler / widok / model. Tak więc, gdybym poszedł do http://example.com/myController to pokazuje ciąg "Hello World". Możliwość wyświetlenia tego ciągu w szablonie mojej strony (na przykład nagłówka, stopki itp.) będzie premią.

  • Jak dodać metodę do tego kontrolera (lub w razie potrzeby nowy kontroler), która współdziała z modelem i wykonuje ZAPYTANIE Select * FROM articles where id='10' i zwraca wiersz (zawierający Kolumny id, title, content) do kontrolera? Następnie użyj kontrolera, aby dołączyć widok, który wyświetli ten wiersz. Więc przejście do http://example.com/myController/show_row (lub czegoś podobnego) wyświetli wiersz w widoku. (Nie trzeba być fantazyjnym, wystarczy echo $row->id; lub coś podobnego by zadziałało.)

Wszelkie inne informacje na temat struktury kodu Magento będą również bardzo pomocne.

Author: Click Upvote, 2009-02-23

6 answers

Przede wszystkim gorąco polecam zakup PDF / E-Book z PHP Architect. To US$20, ale jest jedynym prostym zasobem "Oto jak działa Magento", który udało mi się znaleźć. Zacząłem również pisać tutoriale Magento na mojej własnej stronie internetowej .

Po drugie, jeśli masz wybór, a nie jesteś doświadczonym programistą lub nie masz dostępu do doświadczonego programisty (najlepiej w PHP i} Java), wybierz inny koszyk. Magento jest dobrze zaprojektowany, ale został zaprojektowany, aby być rozwiązaniem wózka, na którym inni programiści mogą budować Moduły. Nie został zaprojektowany tak, aby był łatwo zrozumiały dla ludzi, którzy są inteligentni, ale nie są programistami.

Po Trzecie, Magento MVC bardzo różni się od Ruby on Rails, Django, CodeIgniter, CakePHP , itd. Model MVC, który jest popularny wśród programistów PHP w dzisiejszych czasach. Myślę, że bazuje na modelu Zend , a całość jest bardzo podobny do Javy. Są dwa kontrolery, o które musisz się martwić. Moduł / frontName controller, a następnie kontroler MVC.

Po czwarte, sama aplikacja Magento jest zbudowana przy użyciu tego samego systemu modułów, którego będziesz używać, więc grzebanie w kodzie głównym jest użyteczną taktyką uczenia się. Ponadto, wiele z tego, co będziesz robił z Magento, to nadpisywanie istniejących klas. To, co tu omawiam, to tworzenie nowej funkcjonalności, a nie nadpisywanie. Zostawić pamiętaj o tym, gdy patrzysz na próbki kodu.

Zacznę od pierwszego pytania, pokazując, jak skonfigurować kontroler / router, aby odpowiedzieć na konkretny adres URL. To będzie mała powieść. Może później będę miał czas na tematy związane z modelem/szablonem, ale na razie nie mam. będę jednak krótko rozmawiał z twoim pytaniem SQL.

Magento wykorzystuje architekturę bazy danych EAV . Jeśli to możliwe, spróbuj użyć obiektów modelu, które System zapewnia aby uzyskać potrzebne informacje. Wiem, że wszystko jest w tabelach SQL, ale najlepiej nie myśleć o pobieraniu danych za pomocą surowych zapytań SQL, albo oszalejesz.

Ostateczne zastrzeżenie. Używam Magento od około dwóch lub trzech tygodni, więc caveat emptor. Jest to ćwiczenie, aby uzyskać to prosto w mojej głowie, jak to jest, aby pomóc przepełnienie stosu.

Utwórz moduł

Wszystkie dodatki i dostosowania do Magento są wykonywane za pomocą modułów. Więc pierwszą rzeczą, której potrzebujesz aby to zrobić, należy utworzyć nowy moduł. Tworzenie pliku XML w app/modules o następującej nazwie

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 jest unikalną przestrzenią nazw dla Twoich modyfikacji, nie musi to być Nazwa Twojej firmy, ale zalecana konwencja my magento. HelloWorld to nazwa Twojego modułu.

Wyczyść pamięć podręczną aplikacji

Teraz, gdy plik modułu jest już na miejscu, musimy powiadomić o tym Magento (i sprawdzić naszą pracę). W aplikacji admin

  1. idź do System - > Zarządzanie Cache
  2. wybierz Odśwież z menu All Cache
  3. kliknij Zapisz Ustawienia pamięci podręcznej
Teraz upewniamy się, że Magento wie o module]}
  1. przejdź do System - > Konfiguracja
  2. Kliknij Zaawansowane
  3. w polu ustawień" Wyłącz wyjście modułów " poszukaj nowego modułu o nazwie "MyCompanyName_HelloWorld"

Jeśli możesz żyć z wydajnością spowolnić, możesz wyłączyć pamięć podręczną aplikacji podczas rozwój/uczenie się. Nic nie jest bardziej frustrujące niż zapominanie o wyczyszczeniu pamięci podręcznej i zastanawianie się, dlaczego twoje zmiany nie pojawiają się.

Konfiguracja struktury katalogów

Następnie musimy skonfigurować strukturę katalogów dla modułu. Nie będziesz potrzebował wszystkich tych katalogów, ale nie ma nic złego w skonfigurowaniu ich wszystkich teraz.

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

I dodać plik konfiguracyjny

touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml

I wewnątrz pliku konfiguracyjnego Dodaj następujący tekst, który jest zasadniczo " pustym" konfiguracja.

<?xml version="1.0"?>
<config>
    <modules>
        <MyCompanyName_HelloWorld>
            <version>0.1.0</version>
        </MyCompanyName_HelloWorld>
    </modules>
</config>

Upraszczając sprawy, ten plik konfiguracyjny pozwoli Ci powiedzieć Magento, jaki kod chcesz uruchomić.

[[60]}Konfiguracja routera

Następnie musimy skonfigurować routery modułu. Dzięki temu system będzie wiedział, że obsługujemy dowolne adresy URL w postaci

http://example.com/magento/index.php/helloworld

Więc w pliku konfiguracyjnym dodaj następującą sekcję.

<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>

To, co mówisz, to " dowolny adres URL z nazwą frontową helloworld ...

http://example.com/magento/index.php/helloworld

Powinien używać kontrolera mycompanyname_helloworld".

Więc, z powyższą konfiguracją na miejscu, po załadowaniu strony helloworld powyżej, otrzymasz stronę 404. To dlatego, że nie stworzyliśmy pliku dla naszego kontrolera. Zróbmy to teraz.

touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php

Spróbuj załadować stronę. Postęp! Zamiast 404, otrzymasz wyjątek PHP/Magento

Controller file was loaded but class does not exist

Więc otwórz plik, który właśnie stworzyliśmy i wklej poniższy kod. Nazwa klasa musi być oparta na nazwie podanej w routerze.

<?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";
    }
}

Właśnie skonfigurowaliśmy kontroler module/frontName. Jest to domyślny kontroler i domyślne działanie modułu. Jeśli chcesz dodać Kontrolery lub akcje, musisz pamiętać, że pierwsza część drzewa adresu URL Magento jest niezmienna.]}

Więc jeśli chcesz dopasować ten adres URL

http://example.com/magento/index.php/helloworld/foo

Będziesz musiał mieć FooController, który możesz w ten sposób:

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';
    }
}

Proszę zauważyć, że domyślny Kontroler IndexController i domyślna akcja indexAction mogą być niejawne, ale muszą być jawne, jeśli coś nastąpi po niej. Tak więc http://example.com/magento/index.php/helloworld/foo będzie pasował do kontrolera FooController i akcji indexAction, a nie do akcji fooAction Indexcontrollera. Jeśli chcesz mieć fooAction, w kontrolerze IndexController musisz wywołać ten kontroler jawnie w ten sposób : http://example.com/magento/index.php/helloworld/index/foo ponieważ druga część adres url jest i zawsze będzie nazwą kontrolera. To zachowanie jest dziedzictwem Zend Framework dołączonego do Magento.

Teraz powinieneś być w stanie trafić na następujące adresy URL i zobaczyć wyniki swoich poleceń echo

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

To powinno dać ci podstawowe pojęcie o tym, jak Magento wysyła kontroler. Stąd polecam szturchnięcie na istniejące klasy kontrolerów Magento, aby zobaczyć, jak powinny być używane modele i system szablonu/układu.

 541
Author: Alan Storm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-03 22:17:44

Zmagałem się z Magento przez ostatni miesiąc i wciąż próbuję to rozgryźć. Więc jest to przypadek niewidomego prowadzącego niewidomego. Niewiele jest na drodze do dokumentacji, a forum / wiki jest co najwyżej chaotyczne. Nie tylko to, ale istnieje kilka rozwiązań, które są przestarzałe lub dalekie od optymalnych. Nie jestem pewien, czy masz projekt, czy po prostu próbujesz go rozgryźć, ale prawdopodobnie łatwiej będzie, jeśli zaczniesz od modyfikacji istniejących funkcjonalności, a nie tworzenia coś zupełnie nowego. W tym celu zdecydowanie wybrałbym "Polecane artykuły dla programistów" na wiki. Nowa metoda płatności one otworzyła oczy.

Do debugowania zdecydowanie polecam używanie FirePHP i przeglądanie źródła HTML, gdy coś pójdzie nie tak. Metoda debugowania Ole echo nie działa tak dobrze.

Ogólna architektura jest tak skomplikowana, że nawet gdybym ją całkowicie zrozumiał, musiałbym napisać książkę do zakryj to. Najlepsze, co mogę zrobić, to dać ci radę, której żałuję, że ktoś mi nie dał, kiedy zaczynałem...

Trzymaj się z dala od podstawowych plików. Nie modyfikuj ich, zamiast tego napisz swój własny moduł i Nadpisz to, czego potrzebujesz.

Magento używa plików konfiguracyjnych składających się z XML, aby zdecydować, co ma zrobić. Aby go uruchomić własne rzeczy, w przeciwieństwie do podstawowej funkcjonalności, potrzebujesz poprawnego xml. Niestety nie ma przewodnika jak zbudować XML; trzeba spojrzeć na przykłady i zrobić kilka poważne testy. Aby skomplikować rzeczy zawartość tych plików jest w dużej mierze wielkość liter. Jednak jeśli opanujesz je, możesz zastąpić dowolną część podstawowej funkcjonalności, która sprawia, że system jest bardzo wydajny.

Magento używa metod takich jak Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') zwracanie obiektów określonych klas. Znajduje je domyślnie w swojej podstawowej przestrzeni nazw. Jeśli chcesz, aby używała twoich własnych, musisz nadpisać je w pliku config.xml.

Nazwa zajęć musi odpowiadać folder, w którym są.

Wiele obiektów w Magento ostatecznie rozszerza coś, co nazywa się Varien_Object. Jest to klasa ogólnego przeznaczenia (coś w rodzaju szwajcarskiego noża wojskowego) i jej celem w życiu jest umożliwienie definiowania własnych metod/zmiennych w locie. Na przykład zobaczysz, że jest używana jako gloryfikowana tablica do przekazywania danych z jednej metody do drugiej.

Podczas tworzenia upewnij się, że buforowanie jest wyłączone. To sprawi, że magento będzie niesamowicie powolne, ale zaoszczędzi Ci dużo głowy trauma (od walenia go na biurku).

Zobaczysz $this jest często używany. Oznacza to inną klasę w zależności od tego, jaki plik widzisz. Jest twoim przyjacielem, zwłaszcza w połączeniu z FirePHP.

Zanotuj wszystko na papierze. Bardzo. Istnieje niezliczona ilość małych faktoidów, które będziesz potrzebował 1-2 dni po ich napotkaniu. Magento kocha OO. Nie zdziw się, jeśli śledzenie metody przeprowadzi cię przez 5-10 różnych klas.

Przeczytaj poradnik projektanta tutaj . Jest przeznaczony głównie dla grafików, ale ty potrzebujesz , aby zrozumieć, gdzie i dlaczego wyjście z twojego modułu zakończy się. W tym celu nie zapomnij włączyć "podpowiedzi do ścieżki szablonu" w sekcji deweloper w panelu administracyjnym.

Jest tego więcej, ale zatrzymam się tutaj, zanim to zamieni się w rozprawę doktorską.
 39
Author: Manos Dilaverakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:54:55

Raczej polecę Mage2Gen , to pomoże Ci wygenerować boilerplate i możesz po prostu skupić się na podstawowej logice biznesowej. to tylko przyspiesza sprawy.

 2
Author: Sajid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-27 14:55:32

Moduł Magento to grupa katalogów zawierających bloki, Kontrolery, helpery i modele, które są potrzebne do utworzenia określonej funkcji sklepu. Jest to jednostka dostosowywania na platformie Magento. Moduły Magento można tworzyć w celu wykonywania wielu funkcji z logiką wspierającą wpływ na wrażenia użytkownika i wygląd witryny sklepowej. Ma cykl życia, który pozwala na ich zainstalowanie, usunięcie lub wyłączenie. Z perspektywy zarówno handlowców, jak i deweloperów rozszerzeń, Moduły są jednostką centralną platformy Magento.

Deklaracja modułu

Musimy zadeklarować moduł używając pliku konfiguracyjnego. Jako Magento 2 wyszukaj moduł konfiguracyjny w katalogu etc modułu. Więc teraz stworzymy moduł pliku konfiguracyjnego.xml.

Kod będzie wyglądał tak:

<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Cloudways_Mymodule" setup_version="1.0.0"></module> </config>

Rejestracja modułu Moduł musi być zarejestrowany w systemie Magento 2 przy użyciu klasy Magento Component Registrar. Teraz będziemy Utwórz rejestrację pliku.php w katalogu głównym modułu:

app/code/Cloudways/Mymodule/registration.php

Kod będzie wyglądał tak:

?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Cloudways_Mymodule',
__DIR__
);

Sprawdź Status Modułu Po wykonaniu powyższych kroków stworzylibyśmy prosty moduł. Teraz sprawdzimy status modułu i czy jest on włączony czy wyłączony za pomocą następującego wiersza poleceń:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule
Podziel się swoją opinią po przejściu przez cały proces]}
 0
Author: AbdurRahman Lakhani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-20 14:36:11

Próbowałem zrobić mój moduł z magaplaza hello world tutorial, ale coś poszło nie tak. Zaimportowałem Kod tego modułu https://github.com/astorm/magento2-hello-world z Githuba i zadziałało. z tego modułu utworzyłem go kategorie podkategorie ajax wybierz rozwijany moduł. Po zainstalowaniu go w katalogu Aap / code instalacji magento2 postępuj zgodnie z tym adresem URL.. http://www.example.com/hello_mvvm/hello/world Możesz pobrać jego kod stąd https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns i umieść go w folderze aap / code. następnie uruchom te polecenia...

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

Teraz możesz sprawdzić funkcjonalność modułu z następującym adresem URL http: / / {{www.example.com}} / hello_mvvm / hello / world

 0
Author: Sanaullah Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-03 07:36:58

I,

Proponuję zapoznać się z konfiguracją systemu.

Jak wyświetlić wszystkie kategorie w polu Konfiguracja systemu?

Tutaj rozwiązałem z dobrym przykładem. Działa. Możesz sprawdzić i nauczyć się przepływu kodu.

Jest też zbyt wiele innych przykładów, których powinieneś się nauczyć.

 0
Author: Rajan Soni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-05 13:23:19