2009-08-04 12 views
4

Je veux créer un menu qui affichera dynamiquement les pages statiques actives de CMS; par exemple, si dans mon CMS j'ai ces pages:Menu des pages statiques Magento

  • A propos de nous (activé)
  • Expédition & Remboursement (handicapés)
  • Termes et Conditions (activé)
  • Contacts (activé)

alors le menu ressemblerait à:

À propos de nous | Termes et Conditions | Contacts

Je n'ai besoin que de quelques conseils pour commencer; peut-être que quelqu'un l'a déjà fait avant?

Répondre

1

Dans votre page/html bloc créer une méthode contenant:

$collection = Mage::getModel('cms/page')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId()); 
$collection->getSelect() 
    ->where('is_active = 1') 
    ->order('main_table.sort_order ASC'); 
return $collection; 

que vous pouvez appeler dans votre modèle et foreach() en créant vos LIs

Pourraient besoin d'un certain esprit de peaufinage, en fonction de votre configuration. De mémoire, bien que je pense que cela est intégré, jetez un oeil à design/frontend/../../templates/page/ Je pense me souvenir de rayant des fonctionnalités similaires dans l'un des fichiers phtml là-bas.

où, l'ordre et d'autres choses de sélection se trouvent dans /lib/Zend/Db/Select.php (FYI)

5

Dougle merci beaucoup, c'était vraiment utile!

Fede dans Magento CMS, vous pouvez faire des pages statiques que vous ne pouvez accéder à l'aide de son IDENTIFIER; ce que je voulais, c'est en quelque sorte faire un menu qui affichera automatiquement les pages statiques ACTIVE (activé); et si vous définissez le statut sur Désactiver, il ne devrait pas être dans le menu;

Voici le code que j'ai utilisé, notez qu'il ya SI $PageData['identifier']!='no-route'; no-rute est la page 404, donc je n'en ai pas besoin dans le menu, mais il doit être activé pour que Magento redirige 404 erreurs vers cette page;

<div> 
    <?php $collection = Mage::getModel('cms/page')->getCollection()->addStoreFilter(Mage::app()->getStore()->getId());?> 
    <?php $collection->getSelect() 
      ->where('is_active = 1'); ?> 
    <ul> 
    <?php foreach ($collection as $page): ?> 
     <?php $PageData = $page->getData(); ?> 
     <?php if($PageData['identifier']!='no-route') { ?> 
     <li> 
     <a href="/<?php echo $PageData['identifier']?>"><?php echo $PageData['title'] ?></a> 
     </li> 
     <?php } ?> 
    <?php endforeach; ?> 
</div> 
+0

Nice c'est ce que j'ai prévu, bonne prise sur le no-route, pour obtenir le $ collection = Mage .... merde hors de la vue, vous pouvez le mettre dans une fonction dans le bloc. et appelez $ this-> getNavLinks(); –

1

Pour exclure plus que le j'ai ajouté aucune route un nouveau champ aux pages CMS pour indiquer si la page doit avoir un élément de menu ou non à l'aide vrai ou faux. J'ai suivi Add a new CMS Field et utilisé les éléments suivants dans main.php

$fieldset->addField('menu', 'text', array(
     'name'  => 'menu', 
     'label'  => Mage::helper('cms')->__('On Menu'), 
     'title'  => Mage::helper('cms')->__('On Menu'), 
     'required' => true, 
     'disabled' => $isElementDisabled 
    )); 

ensuite changé cette ligne:

<?php if($PageData['identifier']!='no-route') { ?> 

à

<?php if($PageData['menu']!= 'false') { ?> 
1

Voici une autre façon de mettre des liens statiques au menu du catalogue Magento .Tout d'abord, créez une page statique, attribuez-lui une clé d'URL, par exemple "my-test-page".

Aller à /app/code/core/Mage/Catalogue/Bloc, copier le fichier Navigation.php-/app/code/local/Mage/Catalogue/Bloc, maintenant vous en mesure de le modifier sans aucun souci au sujet de la possibilité de perdre vos modifications avec la mise à niveau de Magento.

Ouvrir le fichier Navigation.php à ligne 265 (magento 1.4) function _renderCategoryMenuItemHtml(...), le code de changement:

$htmlLi .= '>'; 
    $html[] = $htmlLi;      

    $html[] = '<a href="'.$this->getCategoryUrl($category).'"'.$linkClass.'>'; 
    $html[] = '<span>' . $this->escapeHtml($category->getName()) . '</span>'; 
    $html[] = '</a>'; 

que:

$htmlLi .= '>'; 
    $html[] = $htmlLi;   

    if(preg_match('/\/static-/', $this->getCategoryUrl($category))) { 
     $link_url = str_replace("static-", "", $this->getCategoryUrl($category));    
    } else { 
     $link_url = $this->getCategoryUrl($category);    
    } 

    $html[] = '<a href="'.$link_url.'"'.$linkClass.'>'; 
    $html[] = '<span>' . $this->escapeHtml($category->getName()) . '</span>'; 
    $html[] = '</a>'; 

Allez maintenant à la gestion des catégories, la catégorie d'édition, changement de clé URL pour cela: "static-my-test-page" et décochez "Créer une redirection permanente pour l'ancienne URL" case à cocher. Après avoir sauvegardé la catégorie, vous aurez un lien vers ma page de test dans le menu des catégories supérieures de Magento. Donc, après tout ce qui change, vous pouvez convertir le lien de catégorie en lien de page statique en ajoutant le préfixe "static-" à la catégorie clé d'URL.