Использование планшетов в PHP

Я новичок в использовании библиотеки шаблонов Plates для PHP. У меня есть несколько вопросов о том, как его использовать.

Я просматриваю документы и не вижу способа установить глобальный макет. Разве нет способа сделать это?

Я использую это внутри Codeigniter. В идеале я хотел бы установить макет в файле MY_Controller для большей части сайта и изменить его при необходимости в контроллере, расширяющем MY_Controller; например, настройку основного макета сайта, а затем для панели администратора настройку макета администратора в Auth_Controller, который расширяют все остальные контроллеры администратора.

Чтобы изменить макет определенного набора шаблонов, я должен был пройти и отредактировать все эти файлы. Это не кажется идеальным. Или даже просто передать данные боковой панели для определенного макета, нужно передать данные боковой панели в каждый шаблон и из каждого шаблона в макет в каждом файле. Это кажется очень излишним. Я что-то пропустил?

Чтобы уточнить Плиты это система шаблонов / библиотека, http://platesphp.com/

Пример того, о чем я говорю. Макет администратора имеет боковую панель со всеми URL-адресами администратора. Это происходит из загруженного файла конфигурации и имеет собственный файл шаблона / представления.

Я вызываю шаблон и передаю данные из контроллера

// I created a library file that extends the Plates library so it can be easily loaded from the CI loader class
$data['sidebar_data'] = array(
    'navigation'=>'Navigation',
    'assets'=>'Assets',
    'config'=>'Config'
);
$data['controller_name'] => 'Users';
$this->plates->render('admin/whatever_page', $data);

Внутри файла шаблона / текущей страницы

<?php $this->layout('layouts/admin', ['title' => $controller_name, 'sidebar_data' => $sidebar_data])
// stuff for this page
?>

Внутри шаблона навигации боковой панели, который загружается в файл макета администратора

<ul class="menu vertical">
    <?php foreach($sidebar_data as $url => $label):?>
    <li>
        <a href="<?= '/admin/' . $url ?>"><?= $label ?></a>
    </li>
    <?php endforeach; ?>
</ul>

Тогда макет

// there's a HEAD method in here that has the $title variable
<header class="row expanded collapse">
        <div class="column">
            <div class="top-bar">
                <div class="top-bar-left">
                    <ul class="menu">
                        <li>
                            <a href="/"><strong>Site Name</strong></a>
                        </li>
                    </ul>
                </div>
                <div class="top-bar-right">
                    <ul class="menu dropdown align-right" data-dropdown-menu>
                        <li>
                            <?= $current_user ?></a>
                        </li>
                        <li class="divider"> | </li>
                        <li>
                            <?= $this->insert('auth/logout_form') ?>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </header>
    <section id="content">
        <div class="left-panel">
            <?= $this->insert('adminnav', ['sidebar_data' => $sidebar_data])?>
        </div>
        <div class="main-panel">
            <?= $this->section('content')?>
        </div>
    </section>
    <div id="adminmodal" class="reveal" data-reveal>
        <button class="close-button" type="button" data-close aria-label="Close modal">
            <span aria-hidden="true">&times;</span>
        </button>
        <div class="modal-body"></div>
    </div>
    <script type="text/javascript">$(document).foundation()</script>
    <?= $this->insert('_blocks/googleanalytics')?>

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

0 ответов

Преобразуйте массив в json

например: $this->plate->render('admin/ any_page', ["data" => json_encode($data)]);

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