Если я не использую шаблонизатор с моим PHP, как должен выглядеть мой код? - PullRequest
4 голосов
/ 22 декабря 2011

Я не хочу использовать инфраструктуру MVC.Я не хочу использовать шаблонизатор.Я несколько человек магазин, где разработчики, где все шляпы, нет графиков.Мы делаем все это (все слои).Я не хочу, чтобы код смешивался с презентацией, как у классического ASP.

Но я не знаю, как должен выглядеть мой код между серверной стороной и реальной презентацией.

Если я не испускаю HTML в своем коде на стороне сервера, как он попадает на страницу HTML, чтобы я мог делать такие вещи, как <span><?= $myvar ?></span>?и поставить циклы на html-странице?

Спасибо за любой совет.

Ответы [ 7 ]

5 голосов
/ 22 декабря 2011

Для использования циклов и всего, я использую альтернативный синтаксис для структур управления.

Пример:

<div id="messages"<?php if(!(isset($messages) && count($messages))): ?> class="hidden"<?php endif; ?>>
    <?php if(isset($messages)): ?>
    <?php foreach($messages as $message): ?>
    <div class="message"><?php echo $message; ?></div>
    <?php endforeach; ?>
    <?php endif; ?>
</div>

Для получения дополнительной информации см .: http://php.net/manual/en/control-structures.alternative-syntax.php

Кроме того, я использую полу-MVC структуру, где у меня есть класс, который обрабатывает шаблоны (представления), в основном это просто класс, для которого я создаю экземпляр, передаю набор переменных, а затем визуализирую шаблон, когда экземпляр уничтожен. У меня есть массив переменных в этом классе, и затем я использую extract для передачи всех переменных во включаемом файле, например так:

extract($this->variables, EXTR_SKIP);
include($this->file);

РЕДАКТИРОВАТЬ: Вот тот же пример в Smarty:

<div id="messages"{if isset($messages) && !count($messages)} class="hidden"{/if}>
    {if isset($messages)}
    {foreach from=$messages item=message}
    <div class="message">{$message}</div>
    {/foreach}
    {/if}
</div>
2 голосов
/ 22 декабря 2011

Простые проекты PHP обычно генерируют полный HTML-код вместо заполнения шаблонов, поэтому вы просто echo добавляете его в свой PHP-код.

Это запутанно, так что вы в конечном итоге закодируете какую-то систему шаблонов для любого умеренно сложного веб-сайта.

Возможной альтернативой является предоставление вашей странице полностью статического HTML / CSS и использование AJAX для динамического извлечения фактического содержимого (JSON будет хорошим транспортным форматом, он встроен в JS и может быть легко сгенерирован из PHP).,Это избавит вас от всего HTML, засоренного вашим PHP-кодом.Является ли это жизнеспособной альтернативой или нет, зависит от конкретного случая.

1 голос
/ 22 декабря 2011

<span><?= $myvar ?></span> работает.

Цикл будет выглядеть так:

<html>
 <body>

<?php
 for ($i=1; $i<=5; $i++)
   {
   echo "The number is " . $i . "<br />";
   }
 ?>

</body>
 </html> 

Пример взят из здесь .

0 голосов
/ 22 декабря 2011

Вы должны использовать MVC-подобное разделение интересов независимо от того, что вы делаете. Это значит:

  1. По крайней мере один файл имеет формат HTML и содержит несколько переменных. (Вид / шаблон)
  2. По крайней мере один файл - это все php, и он общается только с базой данных. (Модель)
  3. Как минимум один файл обрабатывает запрос http, извлекает данные из базы данных и выполняет представление.

Ядром каждого языка шаблонов php является использование extract() и include внутри функции:

function render_template($___filename, $___data) {
    extract($___data, EXTR_SKIP);
    include $__filename;
}

Вы можете сделать это с помощью интерфейса класса (просмотр объектов) или буферизации вывода, но это является ядром каждой системы шаблонов. Ответственность вашего контроллера заключается в том, чтобы просто собрать этот аргумент $__data (обычно с данными из базы данных) для данного представления.

0 голосов
/ 22 декабря 2011

Как правило, вы бы хотели, чтобы у вас было как можно меньше PHP в вашем HTML.Это означает выполнение всей обработки данных заранее и простую передачу набора переменных тем или иным способом в метод или функцию, включающую HTML.

Любой HTML-код с PHP-смешиванием можно считать шаблоном.Вот упрощенный пример:

// view class

class View {

   public function render($html_template) {
      include('view_path/' . $html_template . '.php');
   }
}

// html template file 'view_path/main.php'

<html>
   <body>
      <h1><?= $this->title ?></h1>
   </body>
</html>

// usage

$view = new View();
$view->title = 'Some Title';
$view->render('main');
0 голосов
/ 22 декабря 2011

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

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

<?php
  require('model.inc');
  process_capuchin_monkey_order_form();
?>
...
<h1>Thank you for your order of <?php echo $order->num_monkeys; ?> monkeys.</h1>
...
0 голосов
/ 22 декабря 2011

Я действительно рекомендую вам использовать php Template Inheritance system.( Не позволяйте этому пугать вас, это всего лишь один файл .) Это простой набор функций, который помогает вам создавать расширяемые представления PHP без проблем и ограничений, включенных в руководство.

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

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