Есть ли различия между блоками представления или элементами в cakephp?


Есть ли разница в использовании блоков представления или элементов для простой панели навигации или динамического меню с содержимым mysql (с помощью метода requestAction())? Что более уместно?

1 4

1 ответ:

Да, есть разница. Элементы-это просто фрагменты php / HTML, которые вы пишете отдельно .ctp-файл, который будет вставлен туда, куда вы вызываете $this->element().

Блоки труднее объяснить. Блоки - это области представления, которые можно определить в другом месте. Блоки могут даже содержать элементы. Лучший пример для объяснения блоков, который я могу придумать, - это стандартный макет CakePHP, в заголовке есть строки

echo $this->fetch('meta');
echo $this->fetch('css');
echo $this->fetch('script');

Эти строки говорю для отображения блоков "мета", "УСБ", и "сценарий" в это место. Вы можете редактировать блоки meta, css, script в ваших представлениях, даже после вызова $this->fetch(); для соответствующего блока. Например, я все время использовал следующее:

echo $this->Html->script('javascript', array('block' => 'script')); 

Это добавит javascript включает в себя в блок скрипта, и я могу использовать его в файлах представления, в элементе, где угодно. Итак, я использую этот трюк, чтобы иметь, какие файлы javascript включены на основе какого представления.ctp-файл, который вы смотрите.

Я должен отметить, как заканчиваются скрипты, css и мета-блоки определение отличается от обычного определения блоков. Обычный способ определения содержимого блока выглядит следующим образом:

$this->start('block');
//Block contents here
$this->end();

Когда следует использовать элементы против блоков?

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

С блоками ищите случаи, когда вы знаете, что хотите повторно использовать некоторые из них. часть представления, но часть имеет некоторую вариацию, основанную на чем-то, что еще не может быть определено.

Фрагменты макетов являются распространенным примером. Возможно, вы хотите отобразить имя страницы в макете. Вы можете установить переменную $name в действиях ваших контроллеров. Но есть вероятность, что позже вы захотите переосмыслить сайт позже, и тогда вы больше не захотите отображать имена страниц в новой теме. Затем следует удалить строку, задающую переменную $name от ваших контроллеров, чтобы быть чистым. Или вы можете избежать этой проблемы, используя блоки и определяя имя страницы, которое должно отображаться в представлении.ОСАГО сами файлы. Теперь ваше приложение больше MVC.

Подробнее об элементах и блоках читайте в официальной кулинарной книге: http://book.cakephp.org/2.0/en/views.html