2010-11-25 8 views
0

J'ai suivi ce tutoriel sur la création de modules dans la section de gestion. J'expérimente juste avec des modules de magento et l'API de twitter. Voici le tutoriel http://t.wits.sg/2009/03/31/howto-repackageable-custom-extension-development-in-magento/Magento: fichier de modèle de chargement du module d'administration

Je suis aussi loin que la deuxième page où j'ai un menu du module dans la gestion qui appelle à la indexAction de mon AdminController comme ceci:

<?php 
class Optimise_Twits_AdminController extends Mage_Adminhtml_Controller_Action 
{ 
    public function indexAction() 
    { 
    $this->loadLayout(); 
    $this->getLayout()->getBlock('content')->append($this->getLayout()-> 
     createBlock('twits/helloWorld')); 
    $this->renderLayout(); 
    } 
} 

Donc, ce affiche le bloc/bloc HelloWorld.php :

<?php 
class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template 
{ 
    protected function _toHtml() 
    { 
    return 'Hello world'; 
    } 
} 
?> 

tout cela fonctionne très bien, je peux accéder à mon menu de gestion, cliquez sur l'élément de menu et je vois « HelloWorld ». Ce que je veux faire est de charger un fichier de modèle ici au lieu d'afficher du texte à travers une classe.

J'ai un formulaire que je veux afficher qui recherche tous les produits et les affiche. Je peux ensuite choisir un produit et écrire dans des balises et quand je clique sur le bouton «soumettre» sur le formulaire, il met en forme les données et les envoie à Twitter comme une mise à jour du statut.

Est-ce que je vais mal à ce sujet? (Ne devrais-je pas utiliser des modèles ici?) Si non, quelqu'un peut-il m'aider avec où mettre mes modèles et comment les appeler.

C'est ce que mon fichier phtml, nous l'espérons ressembler à:

<div class="simple_contact"> 
    <h1 class="cms">'Tweet up' Your Products</h1> 
    <form id="twitter-feed" name="twitter-feed" action="[action_here]" 
    method="post"> 
    <table><tr> 
    <?php 
    $model = Mage::getModel("optimise_twits/products"); 
    $products = $model->getProducts(); 
    $i = 0; 
    foreach ($products as $product) 
    { 
    // var_dump($product); 
    echo '<tr>'; 
    echo '<td>'; 
    echo '<label for="'. $product .'">' . $product . '</label>'; 
    echo '<input type="hidden" name="tweet['.$i.'][product]" value="'. 
     $product .'">'; 
    echo '<br />'; 
    echo '<input type="text" class="hashtag" name="'. 
     'tweet['.$i.'][tags]" id="tags" value="#enter, #product, #hastag"'; 
    echo '</td>'; 
    echo '<td>'; 
    echo '<input type="checkbox" name="tweet['.$i.'][chk]" id="'. 
     $product .'"></td>'; 
    echo '</tr>'; 
    $i++; 
    } 
?> 
<tr> 
    <td colspan="2"><input type="submit" name="submit" value="tweet"></td> 
</tr> 
</table> 
</form> 
</div> 

Merci beaucoup!

Jonesy

Répondre

2

Vous pouvez définir le modèle sur un bloc en l'appelant est la méthode setTemplate(). Mais ne le fais pas.

Si vous utilisez un Mage_Adminhtml_Block_Widget_Grid descendant, il fera la table pour vous, vous avez seulement besoin de fournir une classe de collection et de décrire quelques colonnes. Mais ne fais pas ça non plus.

Utilisez plutôt le module creator. Il fera le widget de la grille nécessaire (et le conteneur) pour vous et économisera des heures/jours de travail. Au moins jusqu'à ce que vous soyez assez expérimenté pour le faire vous-même correctement.

+0

afin que cela va créer les fichiers modèles et tout ce dont j'ai besoin faire est aller en tête et les modifier? Il ne va pas écrire à magento donc je n'ai pas besoin des grilles avec créer un nouvel élément, etc. – iamjonesy

+0

Plus précisément, il héritera du widget Grille de Magento et les boutons standards comme "Ajouter Nouveau" sont inclus dans ce cadre. Vous ne perdez rien en l'essayant. – clockworkgeek

2

Oui, vous le faites correctement. Alors que Magento a une hiérarchie de classes pour créer automatiquement des widgets de formulaire, ils souffrent du même "problème" que tous les composants OO UI étroitement liés: Idéal si vous voulez faire exactement ce qui est fait ailleurs dans l'application. prend du temps si vous voulez/devez personnaliser fortement la fonctionnalité. Cela vaut la peine d'apprendre comment ils fonctionnent, mais il n'y a aucune raison que vous ne puissiez pas utiliser Magento comme vous le feriez avec un système PHP MVC plus simple.

Cela vaut la peine d'apprendre comment fonctionnent tous les systèmes de Magento, mais si vous vous lancez dans l'univers de la grille, il se peut que vous soyez plus confus que lorsque vous avez commencé. Pour passer à votre question spécifique, chaque bloc héritant de Mage_Core_Block_Template a une méthode "setTemplate".

Cette méthode est utilisée pour indiquer à Magento le modèle de phtml que vous voulez utiliser. Ainsi, dans le constructeur de votre bloc, quelque chose comme

class Optimise_Twits_Block_HelloWorld extends Mage_Core_Block_Template 
{ 
    protected function __construct() 
    { 
     $this->setTemplate('path/to/my/template.phtml'); 
    } 
} 

Vous remarquerez également que nous avons supprimé la méthode _toHtml. Le _toHtml dans la classe de base (Mage_Core_Block_Template), est ce qui charge votre modèle. Donc, si vous le surchargez, votre bloc ne chargera plus et ne rendra plus de modèle.

Le chemin du modèle commence à partir du dossier de modèle de base de votre thème. Donc, si vous utilisiez le thème moderne

/app/design/frontend/default/modern/template 

Vous mettriez votre modèle à

/app/design/frontend/default/modern/template/path/to/my/template.phtml 

(ce qui est légèrement simplifiée, mais encore une fois, être trop empêtré dans la façon dont fonctionnent les chemins thématisation pourrait Commencez à suivre le chemin à Mage_Core_Block_Abstract::renderView pour "la vérité")

Cela devrait être suffisant pour vous aider à démarrer. Si vous rencontrez d'autres problèmes, posez simplement une autre question spécifique et quelqu'un devrait pouvoir vous aider. Travaillant votre chemin à travers le Knowledge Base est un excellent moyen d'en apprendre plus sur la façon dont tout cela fonctionne, ainsi que des articles go beyond the knowledge base (disclaimer: Je suis l'auteur des deux)

Questions connexes