magento
Le rendu
Recherche…
Remarques
Personnalisation des fonctionnalités de base avec des thèmes
Les thèmes ont des fichiers de mise en page qui, entre autres, peuvent être utilisés pour modifier les blocs qui apparaissent sur la page. Le modèle de bloc peut également être modifié et différentes méthodes appelées.
Conceptions de niveau magasin
Les thèmes structurés hiérarchiques de Magento signifient qu'un thème de base peut être étendu et attribué au niveau d'un magasin.
Enregistrement de thèmes personnalisés
Les thèmes peuvent être configurés de trois manières:
- Par magasin sous Système> Configuration> Conception.
- Changement de conception avec des limites de temps Système> Conception.
- Les exceptions de thèmes peuvent également être définies pour une catégorie et un niveau de produit.
Package versus Thème
Un package a plusieurs thèmes. Chacun des thèmes d'un package hérite du thème par défaut dans un package.
Design Fallback
La procédure de secours du thème pour localiser les fichiers de modèles est la suivante:
- {package} / {theme}
- {package} / default
- base / défaut
Pour ajouter d'autres répertoires au mécanisme de secours du thème, la méthode Mage_Core_Model_Design_Package :: getFilename doit être réécrite
Pour la zone d'administration, la solution de secours est default / default.
Chemins de modèle et de mise en page
Blocs
Les blocs sont utilisés pour la sortie. Le bloc racine est le parent de tous les blocs et est de type Mage_Page_Block_Html.
Les blocs Mage_Core_Block_Template utilisent des fichiers modèles pour rendre le contenu. Le nom du fichier de modèle est défini dans setTemplate () ou addData ('template') avec des chemins relatifs.
Les templates ne sont que des morceaux de PHP inclus dans Mage_Core_Block_Template. Par conséquent, $ this dans un modèle fait référence au bloc.
Mage_Core_Block_Template utilise un tampon avant d'inclure un modèle pour empêcher une sortie prématurée.
La méthode Mage_Core_Model_Layout :: createBlock crée des instances de blocs.
La classe Mage_Core_Model_Layout_Update considère quels blocs doivent être créés pour chaque page en examinant les descripteurs de présentation.
Tous les blocs de sortie sont rendus, par exemple en appelant toHtml (), qui à son tour peut choisir de rendre leurs enfants.
Les blocs Text et Text_List rendent automatiquement leur contenu.
Deux événements sont déclenchés autour du rendu de bloc et peuvent être utilisés pour modifier le bloc avant et après le rendu du code HTML:
core_block_abstract_to_html_before core_block_abstract_to_html_after Un bloc enfant ne sera rendu automatiquement que s'il fait partie de la classe Mage_Core_Block_Textlist, sinon la méthode getChildHtml doit être appelée.
Les instances de bloc sont accessibles via la disposition, par exemple Mage :: app () -> getLayout () et $ controller-> getLayout (). La sortie de bloc est contrôlée par la fonction _toHtml ().
Les modèles sont rendus par les méthodes renderView () / fetchView () dans un bloc de modèle. La mise en mémoire tampon de sortie peut être désactivée avec $ layout-> setDirectOutput.
Il est possible d'ajouter un bloc à la mise en page actuelle, mais cela doit être fait avant d'appeler la méthode renderLayout ().
XML de mise en page
<reference>
-edit a block
<block>
- define a block
<action>
- call method on a block
<update>
- include nodes from another handle.
Les fichiers de mise en page peuvent être enregistrés dans config.xml:
<config>
<{area}>
<layout>
<updates>
<{name}>
<file>{filepath}</file>
</{name}>
</updates>
</layout>
</{area}>
</config>
La sortie de la page peut être personnalisée des manières suivantes:
- Modifications du modèle
- Changements de disposition
- Blocs de substitution
- Observateurs Les variables sur les blocs peuvent être définies des manières suivantes:
- Mise en page - Actions ou attributs
- Controller - $ this-getLayout () -> getBlock ()
- Blocs enfants - $ this-> getChild ()
- Autre -Mage :: app () -> getLayout ()
Bloc de tête
Les ressources JavaScript et CSS sont gérées dans le bloc Mage_Page_Block_Html_head. Ce bloc gère la fusion des actifs dans un seul fichier afin de minimiser les requêtes HTTP. Le fichier fusionné est basé sur l'heure de modification des fichiers source.
Lors de la fusion de CSS, une fonction de rappel sur Mage_Core_Model_Design_Package est appelée pour mettre à jour les directives @import ou url () avec les URL correctes.
Différents mécanismes pour désactiver la sortie de bloc
- Si la réponse a déjà été créée et définie sur l'objet de réponse en dehors du processus de rendu normal (par exemple, dans un observateur), l'indicateur "no-renderLayout" peut être défini sur le contrôleur d'action en utilisant
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
- Cela empêche
renderLayout()
de traiter les blocs de sortie. - La même chose peut être obtenue en appelant setNoRender (true) sur le contrôleur frontal:
Mage::app()->getFrontController()->setNoRender(true);
- Définir l'
isDispatched()
sur l'objet de réponse peut être plus efficace pour obtenir un effet similaire.
différents types de blocs
- Mage_Core_Block_Template
- Mage_Core_Block_Text_List
- Mage_Core_Block_Messages
- Mage_Core_Block_Text_Tag
- Mage_Core_Block_Text
- Mage_Page_Block_Template_Links Tous les blocs sont des blocs structurels ou Tous les blocs sont des blocs structurels ou des blocs de contenu. Exemple:
- core / text_list
Exemple d'un bloc structurel .
Il n'utilise pas de modèles; il est simplement utilisé pour afficher le contenu de tous ses blocs enfants l'un après l'autre.
- core / template
Exemple d'un bloc de contenu .
La sortie de ce type de bloc dépend du modèle assigné. Ses blocs enfants sont générés dans son modèle via la méthode getChildHtml ('nom_bloc'). Exemple: core / text_list - Exemple de bloc structurel. Il n'utilise pas de modèles; il est simplement utilisé pour afficher le contenu de tous ses blocs enfants l'un après l'autre. core / template - Exemple d'un bloc de contenu. La sortie de ce type de bloc dépend du modèle assigné. Ses blocs enfants sont générés dans son modèle via la méthode getChildHtml ('nom_bloc').
Les instances de bloc sont accessibles depuis le contrôleur
D'un contrôleur d'action:
$this->getLayout()->getBlock('head')->getTemplate();
/**
* Get specified tab grid
*/
public function gridOnlyAction()
{
$this->_initProduct();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_' .
$this->getRequest()->gerParam('gridOnlyBlock')
)
->toHtml()
);
}