2016-10-29 2 views
0

Dans cmf symfony j'aime créer:Symfony CMF afficher tous les contenus statiques de bloc conteneur

  • créer un élément de menu appelé à l'intérieur
  • créer un bloc de conteneur appelé insideBlock
  • créer plusieurs contenus statiques , ils devraient avoir le parent conteneur bloquer

si un utilisateur clique sur le menu à l'intérieur, tous les éléments de contenu statique doivent être affichés, qui ont pour parent l'intérieur Bloc

Je n'ai pas compris comment faire cela. Bien sûr, je n'aime pas programmer une fonction juste pour l'intérieur, puisque je voudrais que les autres menus se comportent de la même manière.

Je suis en mesure de relier un élément de menu à un contenu statique et afficher ce contenu unique, mais dès que je sélectionne le bloc conteneur, l'élément de menu disparait ...

EDIT

Je l'ai fait:

  • dans mon contrôleur ajouter une fonction comme ceci:

    /** 
    * @Route("/{_locale}/empfang", name="empfang_display_all") 
    */ 
    public function empfangAction(Request $request) 
    { 
         $documentManager = $this->get('doctrine_phpcr')->getManager(); 
         $content = $documentManager->find(null, '/cms/content/empfangsgebiet'); 
    
         return $this->render('empfang/empfang.html.twig', [ 
           'contents' => $content 
         ]); 
    } 
    
  • ajouté en tant que trajet vers l'élément de menu empfang_display_all
  • parent de consigne du contenu statique dans le récipient
  • dans la vue

`` {% set index = 0%}

{% for child in children %} 
    {% if (child.name != "banner") and (isInstanceof(child, 'ContainerBlock') == false) %} 
     <div class="{{ cycle(section1, index) }}"> 
      <div class="container"> 
       <div class="row"> 
        <div class="col-xs-12"> 
         <div class="top-title"> 
          <div class="row"> 
           <div class="col-sm-10 col-sm-offset-1"> 
            {% if isInstanceof(child, 'DemoSeoContent') %} 
             {{ child.body|raw }} 
            {% else %} 
             {{ sonata_block_render({ 'name': child.id }) }} 
            {% endif %} 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
     {% set index = index + 1 %} 
    {% endif %} 
{% endfor%} 

Je voudrais maintenant avoir la ligne suivante plus dynamique

$content = $documentManager->find(null, '/cms/content/empfangsgebiet'); 

Préférable Je voudrais avoir comme ceci:

/** 
    * @Route("/{_locale}/empfang/{path}", name="empfang_display_all") 
    */ 
    public function empfangAction(Request $request, $path) 
    { 
     $content = $documentManager->find(null, $path); 
    } 

Répondre

0

blocs ne sont pas des éléments routables, ce qui signifie qu'ils ne peuvent pas avoir leur propre URL. Je pense que la meilleure façon de le faire est d'utiliser une page normale au lieu du bloc conteneur et de configurer l'itinéraire de cette page pour utiliser un modèle spécial. Ensuite, vous écrivez un modèle qui affiche le titre de la page et peut-être le texte en tant que "lead", puis boucle sur les enfants de la page et les sort.

+0

salut dbu, je l'ai fait en attendant. J'ai créé un conteneur, ajouté chaque contenu à ce conteneur, puis ajouté un élément de menu avec routage personnalisé, créé une fonction dans mon contrôleur pour afficher les enfants de ce conteneur particulier ... mais quand j'ajoute un nouveau menu avec des enfants, Je devrais à nouveau créer une fonction personnalisée, je préférerais avoir une fonction générale à appeler ... mais à partir de l'élément de menu, je n'ai pas pensé à ajouter des arguments à ce nom de route ... est-il possible de le faire? – schurtertom

+0

vous pouvez utiliser l'attribut routeParameters dans les attributs de menu pour modifier un itinéraire. – dbu

+0

mais je recommande de créer un document "conteneur" qui est une sorte de "page" afin qu'il puisse avoir son propre itinéraire. Ensuite, vous créez simplement une telle page de conteneur, définissez l'URL et le modèle personnalisé sur l'URL, ajoutez vos blocs et créez un élément de menu pointant vers cette page de conteneur. – dbu