Мне нравится то, что упомянул Фил Стерджен.Хотя это считается очень сложным, мне очень понравилась структура шаблонов, которая есть у magento.
Вдохновленный таким способом структурирования, я создал свою логику (что совсем не здорово, но так просто, как может быть), и, возможно,возможно, я мог бы переопределить -> просмотреть загрузчик и заставить его принимать какой-то объект в качестве имени шаблона и затем загружать структуру по мере необходимости)
first : этот подход должен использоваться очень ответственно (Вы должны подготовить данные в контроллере / методе, которые требуются вашим шаблонам!
секунда : шаблон должен быть подготовлен и структурирован правильно.
Это то, что я делаю:
в каждом контроллере у меня есть атрибут типа Array, что-то вроде этого:
class Main extends CI_Controller {
public $view = Array(
'theend' => 'frontend',
'layout' => '1column',
'mainbar' => array('content','next template file loaded under'),
'sidebar' => array('generic','next template file loaded under'),
'content' => '',
);
В каждом методе, для которого я хочу использовать предыдущую структуруи, если я хочу немного его изменить, я напишу это так:
public function index()
{
$data['view'] = $this->view; // i take/load global class's attribute
$data['view']['mainbar'] = Array('archive','related_posts'); // i change mainbar part of it
// i add/load data that i need in all those templates that are needed $data['view'] also my using same Array $data['my_required_data_that_i_use_in_template_files'] = 1;
$this->load->view('main',$data); //
}
третий В папке / application / view у меня есть структура, подобная
/view/main.php <-- which basically just determines which side's wrapper of web to load (frontend or backend or some other)
/view/frontend/wrapper.php
/view/backend/wrapper.php
/view/mobile/wrapper.php <-- this wrappers are again another level of structuring for ex:
/view/backend/layouts/ <-- inside i have templates different layouts like 1column.php 2columns-left (have left side is narrow one),2columns-right,3columns... etc...
/view/backend/mainbar/ <-- inside i have templates for mainbar in pages
/view/backend/mainbar/.../ <-- in the same way it's possible to add folders for easily grouping templates for example for posts so you add for example
/view/backend/mainbar/posts/ <-- all templates for creating, editing etc posts...
/view/backend/sidebar/ <-- inside i have templates for sidebar in pages
/view/backend/...other special cases.... like dashboard.php
вперед файл в /app/view/main.php выглядит примерно так:
if ($view['theend'] == "frontend")
{
$this->load->view('/frontend/wrapper');
} elseif ($view['theend'] == "backend")
{
$this->load->view('/backend/wrapper');
}
пятый обёртка - это просто некий php в структурированном HTML, где у вас есть голова (загрузказаголовки html, заголовок и т. д.) заголовок / заголовки (загрузка в заголовки, если есть какие-либо переданные переменные / массив $ data ['view'] ['headers'] / переменная (загрузка в файл макета, который просто имеет новую структурированную html)файл со следующим уровнем загрузки файлов) скрипты нижнего колонтитула / нижнего колонтитула (загрузка в нижний колонтитул, если есть какие-либо переданные переменные $ data ['view'] ['footers']) (загрузка таких надписей, как скрипты аналитики / facebook непосредственно перед тегом)
шестой Таким же образом, макет также будет загружать содержимое основной / боковой панели, указанное в общедоступном $ view = Array (....)
Если яв каком-то методе я просто переопределяю часть открытого атрибута $ view = Array (...) и переопределяю только часть, которая отличается.
это сделано примерно так:
public function index()
{
$data['view'] = $this->view; // i take/load global class's attribute
$data['view']['mainbar'] = Array('archive','related_posts'); // i change mainbar part of it
// i add/load data that i need in all those templates that are needed $data['view'] also my using same Array $data['my_required_data_that_i_use_in_template_files'] = 1;
$this->load->view('main',$data); //
}
НАКОНЕЦ Нагрузка идет так:
$ this-> load-> view ('main', $ data);<- Загружает /app/view/main.php и передает $ data $ data имеет узел 'view' ($ data ['view']) и в нем есть подузлы, которые определяют другие важные вещи, такие как: каков конецкакой макет, какие верхние колонтитулы, какие нижние колонтитулы и т. д. ... </p>
Используя определенные данные в $ data ['view'] ['theend'], он загружает надлежащую оболочку
- Снова используя данные в $ data ['view'] ['layout'], далее в обертке загружаются другие, более глубокие структуры, такие как layout ...
- layout, используется тот же $ data ['view'] ['mainbar'], $ data ['view'] ['sidebar'] и другие важные элементы для загрузки, такие как шаблоны основной панели, шаблоны боковой панели ...
Вот и все ....
ps Мне очень жаль, что я не использую числа, но система stackoverflow настолько странная, что вместо отображения 3. она показывает мне 1 ... как вы видите, у меня было несколько вложенных списков ...