2014-11-24 1 views
0

Я хотел бы показать вложенный список в моем шаблоне клинка. Если я хочу быстро отобразить вложенный список, я должен сделать это рекурсивным. Я создал в своей функции шаблона с именем renderNode(). Но эта глобальная функция в моем шаблоне не является хорошей идеей и практикой. Я бы хотел его реорганизовать.Где перемещать функции из шаблона в Laravel

Вы знаете хорошую практику, как организовать мой код?

<?php 
function renderNode($node) { 
echo "<li class='dd-item dd3-item' data-id='$node->id'>"; 
echo "<div class='dd-handle dd3-handle'>Drag</div> 
    <div class='dd3-content'> 
     $node->name 
     <span class='pull-right categories-actions'> 
      <i class='fa fa-plus-square-o delete-category' title=''></i> 
      <i class='fa fa-cogs delete-category' title=''></i> 
      <i class='fa fa-trash-o delete-category' title=''></i> 
     </span> 
    </div>"; 

if ($node->children()->count() > 0) { 
    echo "<ol class='dd-list'>"; 
    foreach($node->children as $child) renderNode($child); 
    echo "</ol>"; 
} 
echo "</li>"; 
} 
?> 
<div id="content" class="col-lg-10 col-sm-11"> 
<div class="row"> 
    <div class="col-lg-12"> 
     <div> 
      <button id="add-new-category" class="btn btn- primary">@lang('categories.new_category')</button> 
     </div> 

     <div class="dd" id="nestable3"> 
      <ol class="dd-list"> 
       @if(isset($categories)) 
       @foreach($categories as $category) 

       <?php renderNode($category); ?> 

       @endforeach 
       @endif 

      </ol> 
     </div> 
    </div><!--/col--> 
</div><!--/row--> 

ответ

0

Вы правы, это не является хорошей практикой. Лучше всего было бы поместить этот код в выбранную вами модель. Модели> Категория были бы наиболее подходящими. Просто сделайте публичную функцию в модели категории, как так ...

public function renderNode($node) 
{ 
// place code here 

return something here; 
} 

затем вызвать функцию модели в шаблоне лезвия

<?php Category::renderNode($node) ?> 

Вы можете передать $ узел через Make :: вида в маршрут с использованием.

Однако, возможно, вы захотите рассмотреть другой подход. Как это ...

@if ($node->children()->count() > 0) 
<ol class='dd-list'> 
@foreach ($node->children as $child) 
    {{ Category::renderNode($child) }} 
@endforeach 
</ol> 
@endif 
+0

Это хорошая практика, чтобы поместить HTML-код в методе от модели? –

+0

Нет, это не приведет к разметке в файле клинка и тяжелой логике в модели. Функции используются только для вычисления чего-либо и возврата значения. Вы можете использовать инструкции if else, чтобы решить, что делать в зависимости от возвращаемого значения. Глядя на ваш код, вам вообще не нужна функция. Вы можете передать переменные pass в представление, используя View :: make() -> with(). Затем в лезвии используйте if, иначе, чтобы определить, что выводить. – Rafael

+0

Хмм, я не знаю, как это можно сделать. Не могли бы вы показать полный пример? –

0
<ol class="dd-list"> 
    @foreach($categories as $category) 
     <li class='dd-item dd3-item' data-id="$category->id"> 
     <div class='dd-handle dd3-handle'>Drag</div> 
      <div class='dd3-content'> 
      {{ $node->name }} 
      <span class='pull-right categories-actions'> 
       <i class='fa fa-plus-square-o delete-category' title=''></i> 
       <i class='fa fa-cogs delete-category' title=''></i> 
       <i class='fa fa-trash-o delete-category' title=''></i> 
      </span> 
     </div> 
     @if ($node->children()->count() > 0) 
      @foreach ($node->children as $child) 
       <li class='dd-item dd3-item' data-id='$child->id'> 
       <div class='dd-handle dd3-handle'>Drag</div> 
       <div class='dd3-content'> 
       {{ $child->name }} 
       <span class='pull-right categories-actions'> 
        <i class='fa fa-plus-square-o delete-category' title=''></i> 
        <i class='fa fa-cogs delete-category' title=''></i> 
        <i class='fa fa-trash-o delete-category' title=''></i> 
       </span> 
      @endforeach 
     @endif 
     </div> 
     </li> 
    @endforeach 
</ol> 

что-то вроде этого

+0

Хмм, Это не работает. Он не отображает вложенный список –

+0

Вы передали переменную в представлении? Использование с? – Rafael

+0

Да Передаю переменную с помощью. –