Как обрабатывать рекурсию в представлениях (mvc)? - PullRequest
1 голос
/ 19 октября 2010

Мне нужно рекурсивно перебирать массив в представлении, и мне было интересно, каковы некоторые лучшие практики для ситуаций такого типа? Я пытаюсь избежать создания желаемого вывода HTML в контроллере или модели.

К вашему сведению, я использую фреймворк для кода.

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Должны быть разные мнения о том, как достичь вашей цели - и многое может зависеть от сложности вашей структуры и от того, как вы хотите организовать свои взгляды.

В самом простом случае вы можете использовать итерационные операторы PHP в своем представлении.Это обычно наблюдается в базовых примерах CI, когда контроллер передает данные в представление, а затем цикл foreach выводит элементы массива или свойства объекта в представлении.Некоторым может не нравиться использовать PHP в своих представлениях (например, если они совместно разрабатывают с дизайнерами, которые боятся синтаксиса PHP) или хотят использовать вместо этого заманчивый класс CI (или сторонних разработчиков).Однако, с вашей точки зрения, нет ничего плохого в PHP.Было отмечено, что PHP уже является языком шаблонов.

Другой подход, который работает для сложных представлений, заключается в использовании вложенных представлений или объединенных представлений.Вы можете загрузить представление, содержащее один итерационный оператор, который, в свою очередь, загружает представление с каждой итерацией.Или, наоборот, вы можете выполнить эту итерацию в своем контроллере и просто объединить выходные данные каждого представления, например, так:

// iterate through a DB result set to create a block of markup
foreach($result_set as $result)
{
  $view_set .= $this->load->view('result_view_1',$result,TRUE); // the third argument allows us to return the output string.
}

// now determine what view will display this bock of markup
$this->load->view('results_page_A',array( 'view_set' => $view_set ));// 

Преимущество этого подхода состоит в том, что ваши представления могут использоваться другими контроллерами или действиями.

0 голосов
/ 23 марта 2013

Эта функциональность включена во встроенный шаблон класса.Недавно я сделал проект, в котором мы хотели создать наши представления без какого-либо собственного PHP-кода внутри представлений.Я только что протестировал этот пример на живой странице, на CI 2.1.3 работает на 100%.

В качестве конкретного примера рассмотрим этот код, который отображает (с минимальным форматированием) ряд номеров, доступных в отеле,и показывает, за номер, ставки в день за каждый день вашего путешествия.(2 дня, в этом примере.)

{available_rooms}
    <p>{room_type} {total_rate}</p>
    {room_rates}
        <p>${room_rate} {room_date}</p>
    {/room_rates}
    <hr>
{/available_rooms}

Без слов, аналогичных:

1 King Bed 119.98
 59.99 2013-03-23
 59.99 2013-03-24

1 King Bed 119.98
 59.99 2013-03-23
 59.99 2013-03-24

2 Double Beds 139.98
 69.99 2013-03-23
 69.99 2013-03-24

2 Double Beds 139.98
 69.99 2013-03-23
 69.99 2013-03-24

Я использовал свой контроллер для передачи данных в движок шаблонов следующим образом:

$this->parser->parse(/reservations_view', $this->data);

Это массив данных, который я успешно использовал в этом примере.Сначала массив был присвоен $ this-> data-> available_rooms, а затем $ this-> data был передан парсеру.

> available_rooms > 0 > room_type = 1 King Bed 
> available_rooms > 0 > total_rate = 119.98 
> available_rooms > 0 > room_rates > 0 > room_rate = 59.99 
> available_rooms > 0 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 0 > room_rates > 1 > room_rate = 59.99 
> available_rooms > 0 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 1 > room_type = 1 King Bed 
> available_rooms > 1 > total_rate = 119.98 
> available_rooms > 1 > room_rates > 0 > room_rate = 59.99 
> available_rooms > 1 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 1 > room_rates > 1 > room_rate = 59.99 
> available_rooms > 1 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 2 > room_type = 2 Double Beds 
> available_rooms > 2 > total_rate = 139.98 
> available_rooms > 2 > room_rates > 0 > room_rate = 69.99 
> available_rooms > 2 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 2 > room_rates > 1 > room_rate = 69.99 
> available_rooms > 2 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 3 > room_type = 2 Double Beds 
> available_rooms > 3 > total_rate = 139.98 
> available_rooms > 3 > room_rates > 0 > room_rate = 69.99 
> available_rooms > 3 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 3 > room_rates > 1 > room_rate = 69.99 
> available_rooms > 3 > room_rates > 1 > room_date = 2013-03-24
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...