CakePHP View, включая другие представления

У меня есть приложение CakePHP, которое в какой-то момент покажет представление с медиафайлами продукта (изображениями или видео). Я хочу знать, есть ли способ включить другое представление, которое угрожает видео или изображениям, в зависимости от флага. Я хочу использовать эти «маленькие представления» для нескольких других целей, поэтому он должен быть «похожим» на компонент торта для повторного использования.

Что вы, ребята, предлагаете использовать в соглашениях Cake (а не использовать необработанную команду include(''))

Просмотрите эту [ссылку] (book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/‌…) и, в частности, часть Элементы этой справочной страницы, которая расскажет вам все, что вам нужно знать

thr 18.09.2008 19:50

@FernandoBarrocal: это обновленная ссылка для версии 2.X book.cakephp.org/2.0/en/views.html#elements

EdgarT 27.02.2013 05:25

Есть ли способ включить несколько макетов в основной макет, аналогично в WordPress есть функция get_template_part()

PlanetHackers 02.11.2015 15:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
14
3
44 768
7

Ответы 7

В интересах получения информации здесь на случай, если кто-то наткнется на это, важно отметить, что решение зависит от версии CakePHP.

Для CakePHP 1.1

$this->renderElement('display', array('flag' => 'value'));

на ваш взгляд, а затем в /app/views/elements/ вы можете создать файл с именем display.thtml, где $flag будет иметь значение того, что вы ему передаете.

Для CakePHP 1.2

$this->element('display', array('flag' => 'value'));

на ваш взгляд, а затем в /app/views/elements/ вы можете создать файл с именем display.ctp, где $flag будет иметь значение того, что вы ему передаете.


In both versions the element will have access to all the data the view has access to + any values you pass to it. Furthermore, as someone pointed out, requestAction() is also an option, but it can take a heavy toll in performance if done without using cache, since it has to go through all the steps a normal action would.

Элементы работают, если вы хотите, чтобы они имели доступ к тем же данным, к которым имеет доступ вызывающее представление.

Если вы хотите, чтобы ваше встроенное представление имело доступ к собственному набору данных, вы можете использовать что-то вроде requestAction(). Это позволяет встроить полноценное представление, которое в противном случае было бы автономным.

I want to use those "small views" to several other purposes, so It should be "like" a cake component, for reutilization.

Это делается с помощью «Помощников», например описано здесь. Но я не уверен, что вы действительно этого хотите. Предложение "Элементы" тоже кажется правильным. Это сильно зависит от того, чего вы пытаетесь достичь. Мои два цента...

В вашем контроллере (в этом примере контроллер сообщений).

function something() {
    return $this->Post->find('all');
}

В каталоге элементов (app / views / element) создайте файл с именем posts.ctp.

В posts.ctp:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

Тогда, на ваш взгляд:

<?php echo $this->element('posts'); ?>

Это в основном взято из книги CakePHP здесь: Создание многоразовых элементов с помощью requestAction

Я считаю, что использование requestAction довольно дорого, поэтому вы захотите изучить кеширование.

Для CakePHP 2.x

Новым в Cake 2.x является возможность расширять заданный вид. Таким образом, хотя элементы отлично подходят для небольших кусочков кода, который можно использовать повторно, расширение представления позволяет повторно использовать представления целиком.

См. Руководство для получения дополнительной / лучшей информации

http://book.cakephp.org/2.0/en/views.html#exnding-views

Также работает для 3.x. Спасибо!

aexl 06.07.2020 14:57

Просто используйте:

<?php include('/<other_view>.ctp'); ?>

в .ctp ваше действие заканчивается.

Например, построить заархивированную функцию

function archived() {
  // do some stuff
  // you can even hook the index() function
  $myscope = array("archived = 1");
  $this->index($myscope);
  // coming back, so the archived view will be launched
  $this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}

Возможно, отрегулируйте действие индекса:

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

Ваш archive.ctp будет:

<?php include('/index.ctp'); ?>

Идеальное повторное использование кода действий и представлений контроллера.

Лучший ответ на данный момент - элементы не имеют доступа к данным контроллера. Используя include, дочернее представление будет иметь доступ ко всем - и это совсем не плохая практика.

Ignacio Vazquez 07.04.2015 18:38

ты мой герой

Yusuf Ibrahim 03.12.2019 18:20

В CakePHP 3.x вы можете просто использовать:

$this->render('view')

Это отобразит представление из того же каталога, что и родительское представление.

Другие вопросы по теме