Comment effectuer les opérations suivantes dans Magento?
Afficher un message "Hello World" en utilisant une approche contrôleur / vue / modèle. Donc, si j'y allais
http://example.com/myController
, la chaîne "Hello World" serait affichée. La possibilité d'afficher cette chaîne dans le modèle de mon site Web (par exemple, l'en-tête, le pied de page, etc.) sera un bonus.Comment ajouter une méthode à ce contrôleur (ou un nouveau contrôleur si nécessaire), qui interagit avec un modèle, exécute la requête
Select * FROM articles where id='10'
et renvoie la ligne (contenant les colonnesid, title, content
) au contrôleur? Et puis utilisez le contrôleur pour inclure une vue, qui afficherait cette ligne. Aller àhttp://example.com/myController/show_row
(ou quelque chose de similaire) afficherait la ligne dans une vue. (Pas besoin d'être sophistiqué, juste unecho $row->id;
ou quelque chose de similaire fonctionnerait.)
Toute autre information sur la structure du code de Magento sera également très utile.
la source
Réponses:
Tout d'abord, je vous recommande fortement d'acheter le PDF / E-Book auprès de PHP Architect . C'est 20 $ US, mais c'est la seule ressource simple "Voici comment fonctionne Magento" que j'ai pu trouver. J'ai également commencé à écrire des tutoriels Magento sur mon propre site Web .
Deuxièmement, si vous avez le choix et que vous n'êtes pas un programmeur expérimenté ou si vous n'avez pas accès à un programmeur expérimenté (idéalement en PHP et Java), choisissez un autre panier . Magento est bien conçu, mais il a été conçu pour être une solution de panier d'achat que d'autres programmeurs peuvent créer des modules. Il n'a pas été conçu pour être facilement compris par des personnes intelligentes, mais qui ne sont pas des programmeurs.
Troisièmement, Magento MVC est très différent du modèle MVC Ruby on Rails , Django , CodeIgniter , CakePHP , etc. qui est populaire auprès des développeurs PHP de nos jours. Je pense qu'il est basé sur le modèle Zend , et le tout est très semblable à Java OOP. Il y a deux contrôleurs dont vous devez vous préoccuper. Le contrôleur module / frontName, puis le contrôleur MVC.
Quatrièmement, l'application Magento elle-même est construite en utilisant le même système de modules que vous utiliserez, donc fouiller autour du code principal est une tactique d'apprentissage utile. En outre, une grande partie de ce que vous ferez avec Magento remplace les classes existantes. Ce que je couvre ici, c'est la création de nouvelles fonctionnalités, pas la substitution. Gardez cela à l'esprit lorsque vous regardez les exemples de code.
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. J'aurai peut-être du temps plus tard pour les sujets liés au modèle / modèle, mais pour l'instant, je n'en ai pas. Je parlerai cependant brièvement de votre question SQL.
Magento utilise une architecture de base de données EAV . Dans la mesure du possible, essayez d'utiliser les objets de modèle fournis par le système pour obtenir les informations dont vous avez besoin. Je sais que tout est là dans les tables SQL, mais il vaut mieux ne pas penser à récupérer des données à l'aide de requêtes SQL brutes, sinon vous deviendrez fou.
Clause de non-responsabilité finale. J'utilise Magento depuis environ deux ou trois semaines, alors mettez en garde Emptor. C'est un exercice pour obtenir ce droit dans ma tête autant que pour aider Stack Overflow.
Créer un module
Tous les ajouts et personnalisations à Magento se font via des modules. Donc, la première chose que vous devrez faire est de créer un nouveau module. Créez un fichier XML dans
app/modules
nommé comme suitMyCompanyName est un espace de noms unique pour vos modifications, ce n'est pas nécessairement le nom de votre entreprise, mais c'est la convention recommandée 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 en informer Magento (et vérifier notre travail). Dans l'application d'administration
Maintenant, nous nous assurons que Magento connaît le module
Si vous pouvez vivre avec un ralentissement des performances, vous souhaiterez peut-être désactiver le cache d'application pendant le développement / l'apprentissage. Rien n'est plus frustrant qu'oublier l'effacement du cache et se demander pourquoi vos modifications n'apparaissent pas.
Configurer la structure du répertoire
Ensuite, nous devrons configurer une structure de répertoires pour le module. Vous n'aurez pas besoin de tous ces répertoires, mais il n'y a aucun mal à les configurer tous maintenant.
Et ajoutez un fichier de configuration
et à l'intérieur du fichier de configuration, ajoutez ce qui suit, qui est essentiellement une configuration "vierge".
Sur-simplifiant les choses, ce fichier de configuration vous permettra de dire à Magento quel code vous souhaitez exécuter.
Configuration du routeur
Ensuite, nous devons configurer les routeurs du module. Cela permettra au système de savoir que nous traitons toutes les URL sous la forme de
Donc, dans votre fichier de configuration, ajoutez la section suivante.
Ce que vous dites ici, c'est "n'importe quelle URL avec le frontName de helloworld ...
doit utiliser le contrôleur frontName MyCompanyName_HelloWorld ".
Ainsi, avec la configuration ci-dessus en place, lorsque vous chargez la page helloworld ci-dessus, vous obtenez une page 404. C'est parce que nous n'avons pas créé de fichier pour notre contrôleur. Faisons ça maintenant.
Essayez maintenant de charger la page. Le progrès! Au lieu d'un 404, vous obtiendrez une exception PHP / Magento
Alors, ouvrez le fichier que nous venons de créer et collez le code suivant. Le nom de la classe doit être basé sur le nom que vous avez fourni dans votre routeur.
Ce que nous venons de configurer est le contrôleur module / frontName. Il s'agit du contrôleur par défaut et de l'action par défaut du module. Si vous souhaitez ajouter des contrôleurs ou des actions, vous devez vous rappeler que la première partie de l'arborescence d'une URL Magento est immuable, ils iront toujours de cette façon
http://example.com/magento/index.php/frontName/controllerName/actionName
Donc, si vous voulez faire correspondre cette URL
Vous devrez avoir un FooController, que vous pouvez faire de cette façon:
Veuillez noter que le contrôleur par défaut IndexController et l'action par défaut indexAction peuvent être implicites mais doivent être explicites si quelque chose vient après. Il en
http://example.com/magento/index.php/helloworld/foo
sera de même pour le contrôleur FooController et l'action indexAction et NON l'action fooAction de l'IndexController. Si vous voulez avoir une fooAction, dans le contrôleur IndexController, vous devez alors appeler ce contrôleur explicitement comme ceci:http://example.com/magento/index.php/helloworld/index/foo
parce que la deuxième partie de l'URL est et sera toujours controllerName. Ce comportement est un héritage du Zend Framework fourni dans Magento.Vous devriez maintenant pouvoir frapper les URL suivantes et voir les résultats de vos déclarations d'écho
Donc, cela devrait vous donner une idée de base sur la façon dont Magento est envoyé à un contrôleur. À partir de là, j'avais recommandé de fouiller dans les classes de contrôleurs Magento existantes pour voir comment les modèles et le système de modèle / disposition devraient être utilisés.
la source
Je lutte avec Magento depuis environ un mois et j'essaie toujours de comprendre. Il s'agit donc d'un cas où des aveugles conduisent des aveugles. Il y a peu de documentation et le forum / wiki est au mieux chaotique. Non seulement cela, mais il existe plusieurs solutions obsolètes ou loin d'être optimales. Je ne sais pas si vous avez un projet ou si vous essayez simplement de le comprendre, mais c'est probablement plus facile si vous commencez par modifier des fonctionnalités existantes plutôt que de créer quelque chose de complètement nouveau. Pour cela, j'irais certainement avec les "articles recommandés pour les développeurs" dans le wiki. Le nouveau mode de paiement a été une véritable révélation.
Pour le débogage, je recommanderais certainement d' utiliser FirePHP et de regarder votre source HTML en cas de problème. La méthode de débogage de l'écho olé ne fonctionne pas vraiment bien.
L'architecture générale est si incroyablement complexe, que même si je la comprenais complètement, j'aurais besoin d'écrire un livre pour la couvrir. Le mieux que je puisse faire est de vous donner des conseils que j'aurais aimé que quelqu'un me donne quand j'ai commencé ...
Éloignez-vous des fichiers de base. Ne les modifiez pas, écrivez plutôt votre propre module et remplacez ce dont vous avez besoin.
Magento utilise des fichiers de configuration composés de XML pour décider de ce qu'il doit faire. Pour pouvoir exécuter vos propres trucs par opposition aux fonctionnalités de base, vous avez besoin du bon xml. Malheureusement, il n'y a pas de guide sur la façon de construire votre XML; vous devez regarder des exemples et faire des tests sérieux. Pour compliquer les choses, le contenu de ces fichiers est largement sensible à la casse. Cependant, si vous les maîtrisez, vous pouvez remplacer n'importe quelle partie des fonctionnalités de base, ce 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 les trouve par défaut dans son espace de noms principal. Si vous souhaitez qu'il utilise le vôtre, vous devez les remplacer dans votreconfig.xml
fichier.Le nom de vos classes doit correspondre au dossier dans lequel elles se trouvent.
Beaucoup d'objets dans Magento étendent finalement ce que l'on appelle un
Varien_Object
. C'est une classe à 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 le verrez utilisé comme un tableau glorifié pour transmettre des données d'une méthode à une autre.Pendant le développement, assurez-vous que la mise en cache est désactivée. Cela rendra Magento atrocement lent, mais cela vous évitera beaucoup de traumatismes crâniens (de le frapper sur votre bureau).
Vous verrez
$this
beaucoup utilisé. Cela signifie une classe différente selon le fichier que vous voyez.get_class($this)
est votre ami, surtout en conjonction avec FirePHP.Notez les choses sur papier. Beaucoup. Il y a d'innombrables petits factoids dont vous aurez besoin 1-2 jours après les avoir rencontrés.
Magento aime OO. Ne soyez pas surpris si le traçage d'une méthode vous mène à travers 5 à 10 classes différentes.
Lisez le guide du designer ici . Il est destiné principalement aux graphistes, mais vous en avez besoin pour comprendre où et pourquoi la sortie de votre module se terminera. Pour cela, n'oubliez pas d'activer "Astuces de chemin de modèle" dans la section développeur du panneau d'administration.
Il y a plus, mais je m'arrêterai ici avant que cela ne se transforme en dissertation.
la source
Je recommanderai plutôt Mage2Gen , cela vous aidera à générer le passe-partout et vous pourrez simplement vous concentrer sur la logique métier principale. cela aide simplement à accélérer les choses.
la source
Un module Magento est un groupe de répertoires contenant des blocs, des contrôleurs, des assistants et des modèles qui sont nécessaires pour créer une fonctionnalité de magasin spécifique. C'est l'unité de personnalisation de la plateforme Magento. Les modules Magento peuvent être créés pour exécuter plusieurs fonctions avec une logique de prise en charge pour influencer l'expérience utilisateur et l'apparence de la vitrine. Il a un cycle de vie qui leur permet d'être installés, supprimés ou désactivés. Du point de vue des commerçants et des développeurs d'extensions, les modules sont l'unité centrale de la plate-forme Magento.
Déclaration de module
Nous devons déclarer le module en utilisant le fichier de configuration. Comme Magento 2, recherchez le module de configuration dans le répertoire etc du module. Alors maintenant, nous allons créer le fichier de configuration module.xml.
Le code ressemblera à ceci:
Enregistrement du module Le module doit être enregistré dans le système Magento 2 à l'aide de la classe Magento Component Registrar. Nous allons maintenant créer le fichier registration.php dans le répertoire racine du module:
Le code ressemblera à ceci:
Vérifier l'état du module Après avoir suivi les étapes ci-dessus, nous aurions créé un module simple. Maintenant, nous allons vérifier l'état du module et s'il est activé ou désactivé en utilisant la ligne de commande suivante:
Partagez vos commentaires une fois que vous avez terminé le processus
la source
J'essayais de faire mon module à partir du tutoriel magaplaza hello world, mais quelque chose s'est mal passé. 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éé un module sous-catégories de catégories ajax select drop downs. Après l'avoir installé dans le répertoire aap / code de votre installation magento2, suivez cette URL. Http://www.example.com/hello_mvvm/hello/world Vous pouvez télécharger son code ici https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns et placez-le dans votre dossier aap / code. que d'exécuter ces commandes ...
Vous pouvez maintenant vérifier la fonctionnalité du module avec l'URL suivante http: // {{www.example.com}} / hello_mvvm / hello / world
la source
Et,
Je vous suggère de vous renseigner sur la configuration du système.
Comment afficher toutes les catégories sur le champ de configuration du système?
Ici, j'ai résolu avec un bon exemple. Ça marche. Vous pouvez vérifier et apprendre le flux de code.
Il y a aussi trop d'exemples que vous devriez apprendre.
la source