Question

Comment le suivant se faire dans Magento?

  • Afficher un message "Bonjour tout le monde" en utilisant une approche contrôleur / view / modèle. Donc, si je suis allé à http://example.com/myController il montrerait la chaîne « Bonjour tout le monde ». Être en mesure de montrer cette chaîne dans le modèle de mon site Web (par exemple, l'en-tête, pied de page, etc.) sera un bonus.

  • Comment puis-je ajouter une méthode à ce contrôleur (ou un nouveau contrôleur si nécessaire), qui interagit avec un modèle, et exécute la Select * FROM articles where id='10' de requête et retourne la ligne (contenant les colonnes id, title, content) au contrôleur? Et puis utiliser le contrôleur pour inclure une vue qui afficherait cette ligne. Donc, aller à http://example.com/myController/show_row (ou quelque chose de similaire) afficherait la ligne dans une vue. (Pas besoin d'être de fantaisie, juste un echo $row->id; ou quelque chose de similaire travailleraient.)

Toute autre information sur la structure de code de Magento sera également très utile.

Était-ce utile?

La solution

D'abord et avant tout, je vous recommande fortement d'acheter PDF / E-Book de PHP Architect . Il est 20 $ US, mais est le seul simple « Voici comment fonctionne Magento » ressource que je suis en mesure de trouver. J'ai aussi commencé à écrire tutoriaux Magento à mon propre site web .

En second lieu, si vous avez un choix, et ne sont pas un programmeur expérimenté ou ne pas avoir accès à un programmeur expérimenté (idéalement en PHP et Java), choisir un autre panier . Magento est bien conçu, mais il a été conçu pour être une solution de panier que d'autres programmeurs peuvent créer des modules sur le dessus de. Il n'a pas été conçu pour être facile à comprendre par les gens qui sont intelligents, mais ne sont pas des programmeurs.

Troisièmement, Magento MVC est très différent du Ruby on Rails , Django , CodeIgniter , CakePHP , etc. modèle MVC qui est populaire avec les développeurs PHP ces jours-ci. Je pense qu'il est basé sur le modèle Zend , et l'ensemble est très Java POO-like. Il y a deux contrôleurs, vous devez être concernés au sujet. Le contrôleur de module / frontName, puis le contrôleur MVC.

En quatrième lieu, l'application Magento lui-même est construit en utilisant le même système de module que vous allez utiliser, piquer donc autour du code de base est une tactique d'apprentissage utile. En outre, beaucoup de ce que vous allez faire avec Magento est prépondérants classes existantes. Ce que je couvre ici création de nouvelles fonctionnalité, pas primordial. Gardez cela à l'esprit quand vous regardez les exemples de code là-bas.

Je vais commencer par votre première question, vous montrant comment configurer un contrôleur / routeur pour répondre à une URL spécifique. Ce sera un petit roman. Je pourrais avoir le temps plus tard pour les sujets liés à modèle / modèle, mais pour l'instant, je ne. Je vais cependant parler brièvement à votre question SQL.

Magento utilise une architecture de base de données EAV . Autant que possible, essayez d'utiliser le modèle des objets système permet d'obtenir les informations dont vous avez besoin. Je sais qu'il est tout ce qu'il ya dans les tables SQL, mais il est préférable de ne pas penser à saisir des données en utilisant des requêtes SQL brutes, ou vous allez devenir fou.

avertissement final. Je me sers de Magento pour environ deux ou trois semaines, emptor donc mise en garde. Ceci est un exercice pour obtenir ce droit dans ma tête autant qu'il est d'aider le débordement de pile.

Créer un module

Tous les ajouts et personnalisations à Magento sont faites à travers des modules. Donc, la première chose que vous aurez besoin de faire est de créer un nouveau module. Créez un fichier XML dans app/modules nommé comme suit

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>

NomDeMaCompagnie est un espace de noms unique pour vos modifications, il ne doit pas être le nom de votre entreprise, mais que la Convention a recommandé mon magento. HelloWorld est le nom de votre module.

Vider le cache de l'application

Maintenant que le fichier du module est en place, nous devons laisser Magento connaître (et vérifier notre travail). Dans l'application admin

  1. Allez dans Système-> Gestion du cache
  2. Sélectionnez Actualiser dans le menu Tous Cache
  3. Cliquez sur Enregistrer les paramètres Cache

Maintenant, nous nous assurons que Magento sait sur le module

  1. Allez dans Système-> Configuration
  2. Cliquez sur Avancé
  3. Dans la zone « Sortie Désactiver les modules », cherchez votre nouveau module nommé « MyCompanyName_HelloWorld "

Si vous pouvez vivre avec les performances ralentir, vous pouvez désactiver le cache de l'application tout en développant / apprentissage. Il n'y a rien de plus frustrant oublier alors clairement le cache et se demandant pourquoi vos modifications ne se présentent pas.

Configuration de la structure de répertoire

Ensuite, nous aurons besoin d'installer une structure de répertoire pour le module. Vous ne aurez pas besoin de tous ces répertoires, mais il n'y a pas de mal à les configurer maintenant.

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

Et ajouter un fichier de configuration

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

et à l'intérieur du fichier de configuration, ajouter ce qui suit, qui est essentiellement une configuration « en blanc ».

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

schématisant les choses, ce fichier de configuration vous permettra de dire Magento ce code que vous voulez exécuter.

Configuration du routeur

Ensuite, nous avons besoin de configurer les routeurs du module. Cela vous permettra de savoir le système que nous manipuler toutes les URL sous forme de

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

Alors, dans votre fichier de configuration, ajoutez la section suivante.

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

Ce que vous dites ici est « une URL avec le frontName de helloworld ...

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

doit utiliser le contrôleur frontName MyCompanyName_HelloWorld ».

Ainsi, la configuration ci-dessus en place, lorsque vous chargez la page helloworld ci-dessus, vous obtiendrez une page 404. En effet, nous n'avons pas créé un fichier pour notre contrôleur. Faisons maintenant.

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

Maintenant, essayez de charger la page. Le progrès! Au lieu d'un 404, vous obtenez un PHP / Magento exception

Controller file was loaded but class does not exist

Alors, ouvrez le fichier que nous venons de créer et coller dans le code suivant. Le nom de la classe doit être basée sur le nom que vous avez fourni dans votre routeur.

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

Ce que nous venons de configuration est le contrôleur de module / frontName. Ceci est le contrôleur par défaut et l'action par défaut du module. Si vous voulez ajouter des contrôleurs ou des actions, vous devez vous rappeler que l'arbre première partie d'une URL Magento sont immuables, ils iront toujours cette façon http://example.com/magento/index.php/frontName/controllerName/actionName

Donc, si vous voulez faire correspondre cette url

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

Vous devez avoir un FooController, que vous pouvez le faire de cette façon:

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

S'il vous plaît noter que le contrôleur par défaut IndexController et la indexAction action par défaut peut par implicite mais doivent être explicites si quelque chose vient après. Donc http://example.com/magento/index.php/helloworld/foo correspondra au contrôleur FooController et le indexAction d'action et pas le fooAction d'action du IndexController. Si vous voulez avoir un fooAction, dans le contrôleur IndexController vous devez alors appeler ce contrôleur explicitement comme la façon suivante: http://example.com/magento/index.php/helloworld/index/foo parce que la deuxième partie de l'URL est et sera toujours le ControllerName. Ce comportement est un héritage du Zend Framework fourni dans Magento.

Vous devriez maintenant être en mesure de frapper les URL suivantes et voir les résultats de vos relevés d'écho

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

Alors, que devrait vous donner une idée de base sur la façon dont Magento envoie à un contrôleur. De là, je l'avais recommandé aux piquer existantes des classes de contrôleur de Magento pour voir comment les modèles et le système modèle / mise en page doit être utilisé.

Autres conseils

J'ai la lutte avec Magento pour le dernier mois et je suis encore en train de le comprendre. Donc, c'est un cas des aveugles conduisant des aveugles. Il y a peu de la manière de la documentation et le forum / wiki est chaotique au mieux. Non seulement cela, mais il existe plusieurs solutions qui sont soit obsolètes ou loin d'être optimale. Je ne sais pas si vous avez un projet ou tout simplement essayer de le comprendre, mais il est probablement plus facile si vous avez commencé à modifier les fonctionnalités existantes plutôt que de créer quelque chose de complètement nouveau. Pour que je vais certainement les « articles recommandés pour les développeurs » dans le wiki. La nouvelle méthode de paiement unique était une véritable révélation.

Pour le débogage je recommande vraiment utilisant FirePHP et regarder votre source HTML quand quelque chose va mal. La méthode de débogage écho ole ne fonctionne pas vraiment bien.

L'architecture générale est si abrutissantes complexe, que même si je comprends complètement, je dois écrire un livre pour le couvrir. Le mieux que je peux faire est de vous donner des conseils, je voudrais que quelqu'un me avait donné quand j'ai commencé ...

Éloignez-vous des fichiers de base. Ne pas les modifier, au lieu d'écrire votre propre module et passer outre ce que vous avez besoin.

Magento utilise des fichiers de configuration XML consistant à décider ce qu'il doit faire. Pour le faire fonctionner vos propres trucs par rapport à la fonctionnalité de base dont vous avez besoin du xml correct. Malheureusement, il n'y a pas de guide sur la façon de vous construire XML; vous devez regarder des exemples et faire quelques tests sérieux. Pour compliquer les choses le contenu de ces fichiers est en grande partie sensible à la casse. Toutefois, si vous maîtrisez ces vous pouvez remplacer une partie de la fonctionnalité de base qui en fait un système très puissant.

Magento utilise des méthodes comme Mage::getModel('mymodel'), Mage::getSingleton('mysingleton'), Mage::helper('myhelper') pour retourner des objets de certaines classes. Il trouve ces par défaut dans son espace de noms de base. Si vous voulez utiliser votre propre, vous devez remplacer ceux-ci dans votre fichier config.xml.

Le nom de vos classes doit correspondre au dossier dans lequel ils sont.

Beaucoup des objets dans Magento étendre à terme ce qu'on appelle un Varien_Object. Ceci est une classe d'usage général (un peu comme un couteau suisse) et son but dans la vie est de vous permettre de définir vos propres méthodes / variables à la volée. Par exemple, vous verrez utilisé comme un tableau glorifié pour transmettre des données d'une méthode à l'autre.

Au cours du développement assurez-vous de la mise en cache est désactivé. Il va faire magento atrocement lent, mais ça va vous faire économiser beaucoup de traumatisme crânien (de cognant sur votre bureau).

Vous verrez $this utilisé beaucoup. Cela signifie une autre classe en fonction de ce fichier que vous voyez. get_class($this) est votre ami, en particulier en conjonction avec FirePHP.

choses Jot sur le papier. Beaucoup. Il y a d'innombrables petits factoids que vous allez en avoir besoin 1-2 jours après que vous les rencontrez.

Magento aime OO. Ne soyez pas surpris si le traçage d'une méthode que vous emmène à travers 5-10 classes différentes.

Lisez le guide du concepteur de rel="noreferrer"> ici. Il est destiné principalement pour les concepteurs graphiques, mais vous besoin pour comprendre où et pourquoi la sortie de votre module finira. Pour cela ne pas oublier de tourner sur « conseils de chemin de modèle » dans la section développeur du panneau d'administration.

Il y a plus, mais je vais arrêter ici avant cela se transforme en une dissertation.

Je recommande plutôt Mage2Gen , cela vous aidera à générer le passe-partout et vous pouvez simplement se concentrer sur le cœur de métier logique. il permet simplement d'accélérer les choses.

Un module Magento est un groupe de répertoires contenant des blocs, des contrôleurs, des aides et des modèles qui sont nécessaires pour créer une fonction de magasin spécifique. Il est l'unité de personnalisation dans la plate-forme Magento. Les modules Magento peuvent être créés pour exécuter des fonctions multiples avec une logique de soutien pour influencer l'expérience utilisateur et l'apparence de la devanture. Il a un cycle de vie qui leur permet d'être installés, supprimés ou désactivés. Du point de vue des marchands et des promoteurs d'extension, les modules sont l'unité centrale de la plate-forme Magento.

Déclaration du module

Nous devons déclarer le module en utilisant le fichier de configuration. Comme la recherche Magento 2 pour le module de configuration dans le répertoire etc du module. Alors maintenant, nous allons créer module.xml fichier de configuration.

Le code ressemblera à ceci:

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

Enregistrement du module Le module doit être enregistré dans le système Magento 2 en utilisant la classe Registraire Component Magento. Maintenant, nous allons créer le fichier registration.php dans le répertoire racine du module:

app/code/Cloudways/Mymodule/registration.php

Le code ressemblera à ceci:

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

Vérifier l'état du module Après avoir suivi les étapes ci-dessus, nous avons créé un module simple. Maintenant, nous allons vérifier l'état du module et si elle est activée ou désactivée en utilisant la ligne de commande suivante:

php bin/magento module:status

php bin/magento module:enable Cloudways_Mymodule

part de vos commentaires une fois que vous avez passé à travers le processus complet

Je suis en train de faire mon module de magaplaza bonjour tutoriel monde, mais quelque chose a mal tourné. J'ai importé le code de ce module https://github.com/astorm/magento2-hello-world de github et cela a fonctionné. à partir de ce module, je l'ai créé une sous-catégories ajax sélectionnez Module de bas de baisse. Après l'avoir installé dans aap / répertoire de code de votre installation magento2 suivre cette URL .. http: // www .example.com / hello_mvvm / bonjour / monde Vous pouvez télécharger son code d'ici https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns et le placer dans votre dossier aap / code. que ces commandes, ...

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

Maintenant, vous pouvez vérifier la fonctionnalité du module avec l'URL suivante http: // {{www.example.com}} / hello_mvvm / bonjour / monde

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top