CodeIgniter эквиваленты главных страниц ASP.NET MVC и областей содержимого? - PullRequest
1 голос
/ 28 мая 2011

Я использовал PHP много лет назад, но с тех пор развиваюсь в C # / VB.Net.

В ASP.Net MVC 2 вы можете предоставить главную страницу, которая определяет области содержимого, например:

<html>
    <head>
        <title>Overshare | <?=$Title?></title>              
        <ContentArea name="Head"/>
    </head>
    <body>
        <ContentArea name="Body"/>
    </body>
</html>

Ваш взгляд будет иметь что-то вроде:

<Content name="Head">
    <!-- Some Head Content -->
</Content>
<Content name="Body">
    <h1>Some Body Here</h1>
</Content>

Кажется, я не могу эмулировать ту же функциональность с Code Igniter. Опции кажутся:

  • вручную предварительно установите некоторый ассоциативный массив переменных (например, в контроллере), а затем просто подставьте значения в файл шаблона. Это большой код, который нужно повторять в каждом представлении, и он не принадлежит контроллеру. Это также означает, что очень трудно помещать большие тела html в один из ContentAreas - это либо конкатенация строк, либо что-то столь же неприятное, практически без шансов на HTML intellisense в любой IDE.
  • Использовать библиотеку шаблонов - я не нашел библиотеку, которая принципиально не работает, как описано выше

Теперь я раньше не использовал CodeIgniter и собираюсь запустить большой PHP-проект, поэтому хочу убедиться, что это правильный инструмент, прежде чем начать работу. Я упускаю что-то очевидное или эту шаблонную функциональность сложно воспроизвести?

Редактировать: Проверенные библиотеки:

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

Если у вас есть хорошее представление о том, как должны создаваться ваши страницы, вы можете написать набор функций для их решения либо в файле MY_Controller.php, либо в библиотеке.

Так что вы можете иметь подпрограмму, которая вызывает

$ this-> mypagetemplates ();

которая вызывает данные из свойств класса, например, $ this-> page-> title;

Я делю свои данные, когда создаю их на

$ this-> PAGE-> голова, $ This-> PAGE-> заголовок, $ This-> PAGE-> содержание, $ This-> PAGE-> в сторону $ This-> PAGE-> сноска

Что соответствует разделам HTML5, которые мы используем в 90% наших проектов

Моя функция $ this-> mypagetemplates () (или метод, если вы предпочитаете) может принимать несколько аргументов и в результате вызывать различные представления, например:

$ contentview = 'shop / products'; $ asideview = 'shop / basket';

Которые, если они заполнены, называются так

If ($asideview) {
    $this->load->view($asideview, $this->page->aside);
}

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

0 голосов
/ 08 мая 2012

Я закончил тем, что создал 3 файла, которые представляли следующее

OpenHeader:

<html>
    <head>
        <Head Stuff/>

OpenBody:

    </head>
    <body>
        <html>
            <Templating Stuff>

Закрыть:

            </Templating Stuff>
        </html>
    </body>
</html>

А затем изменил мои взгляды, включив эти три в соответствующее время.

Это не элегантно, но гибко и мощно, так что на данный момент это подойдет, тем более что я могу передавать переменные, например, заголовок страницы, в файлы во время включения, если я использую механизм представления CodeIgniter для их извлечения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...