Domanda

Come può il seguente essere realizzato in Magento?

  • Visualizzazione di un messaggio utilizzando un approccio di controllo / view / modello "Ciao Mondo". Quindi, se sono andato a http://example.com/myController sarebbe mostrare la stringa 'Ciao Mondo'. Essere in grado di dimostrare questa stringa all'interno del modello del mio sito web (ad esempio, l'intestazione, piè di pagina, ecc) sarà un bonus.

  • Come faccio ad aggiungere un metodo per questo controller (o un nuovo controller, se necessario), che interagisce con un modello, ed esegue la Select * FROM articles where id='10' query e restituisce la riga (che contiene il id, title, content colonne) per il controllore? E quindi utilizzare il controller per includere una vista, che visualizzerebbe questa riga. Quindi, andando a http://example.com/myController/show_row (o qualcosa di simile) sarebbe visualizzare la riga all'interno di una vista. (Non c'è bisogno di essere di fantasia, solo una echo $row->id; o qualcosa di simile avrebbe funzionato.)

Qualsiasi altra informazione sulla struttura del codice di Magento sarà anche molto utile.

È stato utile?

Soluzione

In primo luogo, vi consiglio vivamente di acquistare la PDF / E-Book da PHP Architect . E 'US $ 20, ma è l'unico semplice "Ecco come funziona Magento" risorsa Sono stato in grado di trovare. Ho anche iniziato a scrivere tutorial Magento al mio sito web proprio .

In secondo luogo, se si dispone di una scelta, e non sono un programmatore esperto o non hanno accesso a un programmatore esperto (idealmente in PHP e Java), scegliere un altro carrello . Magento è ben progettato, ma è stato progettato per essere una soluzione carrello della spesa che altri programmatori possono costruire moduli in cima. Non è stato progettato per essere facilmente comprensibile per le persone che sono intelligenti, ma non sono programmatori.

In terzo luogo, Magento MVC è molto diverso dal Ruby on Rails , Django , CodeIgniter , CakePHP , ecc modello MVC che è popolare con gli sviluppatori di PHP in questi giorni. Penso che sia basato sul href="http://en.wikipedia.org/wiki/Zend_Framework" rel="noreferrer"> Zend modello due i controllori è necessario essere preoccupati. Il controller del modulo / frontName, e quindi il controller MVC.

In quarto luogo, l'applicazione Magento stessa è costruita utilizzando lo stesso sistema di moduli che verrà usato, in modo da rovistando il codice di base è una tattica di apprendimento utile. Inoltre, un sacco di quello che farete con Magento è imperativi classi esistenti. Quello che sto coprendo qui è creazione di nuove funzionalità, non ignorando. Tenetelo a mente quando si sta guardando gli esempi di codice là fuori.

Ho intenzione di iniziare con la prima domanda, che vi mostra come impostare un controller / router per rispondere a un URL specifico. Questo sarà un piccolo romanzo. Potrei avere il tempo più tardi per i temi del modello / template correlati, ma per ora, non lo faccio. Io, però, parlare brevemente alla tua domanda di SQL.

Magento utilizza un EAV architettura di database. Quando possibile, cercare di utilizzare gli oggetti del modello il sistema fornisce per ottenere le informazioni necessarie. Lo so che è tutto lì nelle tabelle SQL, ma è meglio non pensare di afferrare i dati utilizzando query SQL prime, oppure vado pazzo.

dichiarazione di non responsabilità finale. Sto usando Magento per circa due o tre settimane, caveat emptor così. Questo è un esercizio per ottenere questo diritto nella mia testa tanto quanto lo è quello di aiutare Stack Overflow.

Creare un modulo

Tutte le aggiunte e personalizzazioni per Magento avvengono per mezzo di moduli. Quindi, la prima cosa che devi fare è creare un nuovo modulo. Creare un file XML in app/modules nominato come segue

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 è uno spazio dei nomi unico per le modifiche, non deve essere il nome della società, ma che la convenzione consigliato il mio Magento. HelloWorld è il nome del modulo.

Svuota cache dell'applicazione

Ora che il file del modulo è a posto, avremo bisogno di far Magento sapere su di esso (e controllare il nostro lavoro). Nell'applicazione di amministrazione

  1. Vai a Sistema-> Gestione Cache
  2. Selezionare Aggiorna dal menu Tutte le cache
  3. Fare clic su Impostazioni Salva cache

Ora, facciamo in modo che Magento conosce il modulo

  1. Recarsi nel menu Sistema> Configurazione
  2. Fare clic su Avanzate
  3. Nella "uscita moduli Disattiva" casella di impostazione, cerca il tuo nuovo modulo denominato "MyCompanyName_HelloWorld "

Se si può vivere con la performance rallenta, si potrebbe desiderare di disattivare la cache dell'applicazione durante lo sviluppo / apprendimento. Niente è più frustrante poi dimenticare la chiara fuori la cache e si chiede perché le modifiche non vengono visualizzati.

Imposta la struttura delle directory

Quindi, avremo bisogno di impostare una struttura di directory per il modulo. Non avrete bisogno di tutte queste directory, ma non c'è nulla di male in tutti loro la creazione di società.

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

E aggiungere un file di configurazione

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

e all'interno del file di configurazione, aggiungere la seguente, che è essenzialmente una configurazione "vuoto".

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

Semplificando le cose, questo file di configurazione vi permetterà di dire Magento quale codice che si desidera eseguire.

Impostazione del router

Quindi, abbiamo bisogno di impostare i router del modulo. Questo farà si che il sistema di sapere che stiamo movimentazione qualsiasi URL in forma di

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

Quindi, nel file di configurazione, aggiungere la seguente sezione.

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

Quello che stai dicendo qui è "qualsiasi URL con l'frontName di helloworld ...

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

dovrebbe utilizzare il controller di MyCompanyName_HelloWorld frontName".

Così, con la configurazione sopra al suo posto, quando si carica la pagina HelloWorld sopra, si otterrà una pagina 404. Questo perché non abbiamo creato un programma per il nostro controller. Facciamolo adesso.

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

Ora provate il caricamento della pagina. Progresso! Invece di un 404, si otterrà un PHP / un'eccezione Magento

Controller file was loaded but class does not exist

Quindi, aprire il file che abbiamo appena creato, e incollare il seguente codice. Il nome della classe deve essere in base al nome che hai fornito nel router.

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

quello che abbiamo appena messa a punto è il controller del modulo / frontName. Questo è il controller predefinito e l'azione predefinita del modulo. Se si desidera aggiungere controllori o azioni, si deve ricordare che la prima parte albero di un URL Magento sono immutabili saranno sempre andare in questo modo http://example.com/magento/index.php/frontName/controllerName/actionName

Quindi, se si desidera far corrispondere questo URL

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

Si dovrà avere un FooController, che si può fare in questo modo:

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

Si prega di notare che l'IndexController controller di default e l'indexAction azione predefinita può da implicita, ma devono essere esplicito se qualcosa verrà dopo di esso. Così http://example.com/magento/index.php/helloworld/foo corrisponderà alla FooController controller e l'indexAction azione e non l'azione del fooAction IndexController. Se si vuole avere un fooAction, nel regolatore IndexController è quindi necessario chiamare questo controller in modo esplicito come in questo modo: http://example.com/magento/index.php/helloworld/index/foo perché la seconda parte dell'URL è e sarà sempre il NomeControllore. Questo comportamento è un'eredità di Zend Framework in bundle in Magento.

Si dovrebbe ora essere in grado di colpire i seguenti URL e vedere i risultati delle sue dichiarazioni 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

Quindi, che dovrebbe darvi un'idea di base su come Magento invia a un controller. Da qui avevo raccomandato frugando le classi controller Magento esistenti per vedere come devono essere utilizzati i modelli e il sistema di template / layout.

Altri suggerimenti

Sono stato alle prese con Magento per l'ultimo mese o giù di lì e sto ancora cercando di capirlo. Quindi questo è un caso del cieco che guida il cieco. C'è poco in termini di documentazione e forum / wiki è caotica al meglio. Non solo, ma ci sono diverse soluzioni che sono o obsoleti o tutt'altro che ottimale. Non sono sicuro se si dispone di un progetto o solo cercando di capirlo, ma probabilmente è più facile se si è iniziato con la modifica funzionalità esistenti invece di creare qualcosa di completamente nuovo. Per questo mi piacerebbe sicuramente andare con i "Articoli consigliati per gli sviluppatori" nel wiki. Il nuovo metodo di pagamento è stata una vera rivelazione.

Per il debugging Consiglio vivamente utilizzando FirePHP e guardando il tuo codice HTML quando qualcosa va storto. Il metodo eco di debug ole in realtà non funziona tanto bene.

L'architettura generale è così mente numbingly complesso, che, anche se ho completamente capito, avrei bisogno di scrivere un libro per coprirlo. La cosa migliore che posso fare è dare consigli Vorrei che qualcuno mi aveva dato quando ho iniziato ...

Stare lontano da file core. Non modificarli, invece scrivere il proprio modulo e ignorare ciò che vi serve.

Magento utilizza file di configurazione XML, comprensivi di decidere che cosa deve fare. Al fine di farlo funzionare la vostra roba in contrasto con funzionalità di base è necessario il codice XML corretto. Purtroppo non c'è una guida su come costruire voi XML; è necessario guardare a esempi e fare qualche prova seria. A complicare le cose il contenuto di questi file è in gran parte tra maiuscole e minuscole. Tuttavia, se si padronanza di questi è possibile sostituire qualsiasi parte della funzionalità di base che lo rende un sistema molto potente.

Magento utilizza metodi come Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') restituire gli oggetti di alcune classi. Essa trova questi di default nel suo namespace principale. Se si desidera utilizzare il proprio, è necessario eseguire l'override questi nel file config.xml.

Il nome delle classi deve corrispondere alla cartella cui si trovano.

Un sacco di oggetti in Magento in ultima analisi, si estende una cosa chiamata Varien_Object. Questa è una classe di uso generale (come una sorta di coltellino svizzero) e il suo scopo nella vita è quello di permettere di definire i propri metodi / variabili al volo. Per esempio vedrete che usato come matrice glorificato per passare i dati da un metodo all'altro.

Durante lo sviluppo assicuratevi di cache è disabilitata. Ti farà Magento estremamente lento, ma ti risparmiare un sacco di trauma cranico (da sbattere sulla scrivania).

Vedrai $this utilizzato un sacco. Significa una classe diversa a seconda di quale file si vede. get_class($this) è tuo amico, soprattutto in connessione con FirePHP.

le cose annotare su carta. Un sacco. Ci sono innumerevoli piccole factoids che Avrai bisogno di 1-2 giorni dopo che li incontrano.

Magento ama OO. Non stupitevi se tracciando un metodo che porta attraverso 5-10 classi diverse.

Per saperne di guida del progettista qui . E 'pensato principalmente per i progettisti grafici, ma necessità per capire dove e perché l'uscita dal modulo finirà. Per questo non dimenticate di attivare il "suggerimenti percorso del modello" nella sezione sviluppatore del pannello di amministrazione.

C'è di più, ma mi fermo qui prima che questo si trasforma in una dissertazione.

Io invece consiglio Mage2Gen , questo vi aiuterà a generare il testo standard e si può solo concentrarsi sul core business logica. solo aiuta a velocizzare le cose.

Un modulo Magento è un gruppo di directory contenenti blocchi, controllori, aiutanti, e modelli che sono necessari per creare una funzione di negozio specifico. E 'l'unità di personalizzazione nella piattaforma Magento. Moduli Magento possono essere creati per eseguire funzioni multiple con supporto logica per influenzare esperienza dell'utente e l'aspetto storefront. Ha un ciclo di vita che permette loro di essere installati, cancellati, o disabilitato. Dalla prospettiva dei commercianti e sviluppatori di estensioni, moduli sono l'unità centrale della piattaforma Magento.

Dichiarazione del modulo

Dobbiamo dichiarare il modulo utilizzando il file di configurazione. Come Magento 2 ricerca di modulo di configurazione in etc directory del modulo. Così ora creeremo file di configurazione Module.xml.

Il codice sarà simile a questa:

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

Registrazione del modulo Il modulo deve essere registrato nel sistema Magento 2 utilizzando classe Magento Component cancelliere. Ora creeremo il file registration.php nella directory principale del modulo:

app/code/Cloudways/Mymodule/registration.php

Il codice sarà simile a questa:

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

Verifica stato del modulo Dopo aver seguito i passaggi precedenti, avremmo creato un modulo semplice. Ora ci accingiamo a verificare lo stato del modulo e se è abilitato o disabilitato utilizzando la seguente riga di comando:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

Condividi la tua risposte una volta che sono passati attraverso un processo completo

Stavo cercando di fare il mio modulo dal magaplaza ciao mondo tutorial, ma qualcosa è andato storto. Ho importato il codice di questo modulo https://github.com/astorm/magento2-hello-world da github e ha funzionato. da quel modulo, ho creato un categorie sottocategorie ajax selezionare elenchi a discesa del modulo. Dopo l'installazione in AAP / Codice repertorio dell'installazione magento2 seguire questa URL .. http: // www .example.com / hello_mvvm / ciao / mondo È possibile scaricare il suo codice da qui https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns e metterlo in la cartella aap / code. di eseguire questi comandi ...

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

Ora è possibile verificare la funzionalità modulo con seguente URL http: // {{www.example.com}} / hello_mvvm / ciao / mondo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top