2017-09-14 3 views
0

J'ai créé une fonction dans twig/php pour exécuter un tableau et retourner uniquement les chiffres qui correspondent à l'aide d'une instruction if pour chaque plage. Je dois reproduire cela 10 fois et je me demandais quelle est la meilleure pratique (c'est-à-dire s'il y a une main plus courte ou devrais-je m'en tenir à cela).Sortir de la boucle for et retourner après que chaque tour de variables a été renvoyé

 <p>Ceiling</p> 

     {% for category in categories|sort %} 

      {% if category.range == "Ceiling" %} 
       <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a> 
      {% endif %} 

     {% endfor %} 

     <hr> 

     <p>Lamps</p> 

     {% for category in categories|sort %} 

      {% if category.range == "Lamps" %} 
       <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a> 
      {% endif %} 

     {% endfor %} 

     <hr> 

Les plages de cet exemple sont Plafond et Lampes qui n'impriment que dans ces plages.

Le contrôleur

  $data['categories'][] = array(
       'range' => $ProductRange, 
       'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 
       'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) 
      ); 
+0

Où est défini '$ ProductRange'? – Ice76

Répondre

0

J'essaie d'éviter une boucle à travers un tableau deux fois - cela signifie généralement que vous ne l'avez pas organiser vos informations correctement ou ne l'avez pas assez la première fois. Dans votre cas, vous pouvez trier les catégories dans les lampes et les plafonds avant d'envoyer les informations au modèle. Cela réduirait le temps d'exécution de moitié si vous le triiez comme vous le mettez dans la variable de catégories puisque chaque boucle s'exécuterait et tout imprimerait.

Vous pouvez même créer des 'lampes' et des 'plafonds' dans des clés de tableau contenant des tableaux et lancer foreach sur les catégories ['lamps'] et les catégories ['ceiling']. Ensuite, vous pouvez également afficher les catégories sinon vide, et vide, afficher un message approprié

+0

C'est ce que j'ai fait. Je l'ai édité pour montrer mon contrôleur –

+0

@Phpuser Je voulais dire que, si vous structurez vos données, vous pouvez toujours exécuter deux boucles. Un pour chaque catégorie, mais il ne courra pas à travers tout à chaque fois – Ice76

0

Pour eloborate sur la réponse de @ de Ice76,

PHP

<?php 
    $temp = fetchYourCategories(); 
    $categories_per_range = []; 

    foreach($temp as $category) { 
     if (!isset($categories[$category->range])) $categories[$category->range] = []; 
     $categories[$category->range][] = $category; 
    } 

    echo $twig->render('template.twig', [ 'categories_per_range' => $categories_per_range, ]); 

Brindille

{% for range, categories in categories_per_range %} 
    <h1>{{ range }}</h1> 
    {% for category in categories %} 
     <a href="{{ category.href }}"><li class="SubRange">{{ category.name }}</li></a> 
    {% endfor %}   
    <hr /> 
{% endfor %} 
+0

Cela ne fonctionnera pas malheureusement –

+0

Les gammes de produits sont en boucle avec les catégories. –

+0

J'ai modifié pour inclure le contrôleur –