Идеальный шаблонизатор

Статус
В этой теме нельзя размещать новые ответы.

pachanga

Новичок
Автор оригинала: С.
pachanga, не хватает реализации второй задачи также хорошо.
На счет второй задачи, где, я так понимаю, требуется облегчить работу с формами. Я уже приводил, как это будет выглядить примерно в MACRO, я сейчас тебе еще покажу, как будет выглядеть в контроллере(на самом деле, эта схема у нас уже работает с шаблонизатором WACT, портировать ее на MACRO не должно составить труда, если интересно, можно почитать здесь http://wiki.limb-project.com/doku.php?id=limb3:ru:tutorials:basic).

Вот, шаблон для создания новостей:

Код:
<h1>Create news</h1>
 
{{form:errors form='news_form' target='$errors'/}}
 
{{list from='$errors' as='$item'}}
<ul>
{{list:item}}
      <li class='error'>{$item.message}</li>
{{/list:item}}
</ul>
{{/list}}

{{form id='news_form'}}
 
<label for="title">Title</label> : 
{{input name='title' type='text' size='60'/}}<br/>
 
<label for="date">Date</label> : 
{{datetime name='date'/}}<br/>
 
<label for="annotation">Annotation</label> : 
{{textarea name='annotation' rows='2' cols='40'}}{{/textarea}}<br/>
 
<label for="content">Content</label> : 
{{textarea name='content' rows='5' cols='40'}}{{/textarea}}<br/>
 
<input type='submit' value='Create'/>
 
{{/form}}
А вот контроллер:

Код:
require_once('src/model/News.class.php');
 
class NewsController extends lmbController
{
  function doCreate()
  {
    if(!$this->request->hasPost())
      return;
 
    $news = new News();
    $news->import($this->request);
 
    $this->useForm('news_form');
    $this->setFormDatasource($news);
 
    if($news->trySave($this->error_list))
      $this->redirect();  
   }
}
Этот код добавляет весь необходимый функционал для создания новости: валидация, связь объекта новости с формой, собственно создание новости.

Насколько теперь MACRO приблизился к "идеалу"? ;)
 

С.

Продвинутый новичок
Пока что отдалился. Я лично считаю такой шаблон формы неприемлемым. Как идеально -- не знаю. Ищем-с.
 

pachanga

Новичок
Автор оригинала: С.
Пока что отдалился. Я лично считаю такой шаблон формы неприемлемым. Как идеально -- не знаю. Ищем-с.
Ну если ты даже еще и не знаешь своего "идеала", как же ты собираешься вообще судить? Не много ли на себя берешь? ;) (дайте мне то, не знаю чего) Только я готов с тобой поспорить, что в связке с моделью ты вряд ли сможешь сделать что-то короче и более читабельно нежели в MACRO.
 

dark-demon

d(^-^)b
PHP:
<label for="title">Title</label> : 
{{input name='title' type='text' size='60'/}}<br/>
PHP:
<label> Title:
    <input name="title" size="60" />
</label>
ну и нафига угловые скобки заменять на двойные фигурные?
 

С.

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

pachanga

Новичок
dark-demon
А ты все же подумай _головой_, прочитай еще раз тред о MACRO и пройдись по тем ссылкам, что я указал

-~{}~ 20.10.07 21:37:

Автор оригинала: С.
Если бы я знал идеал, то не начинал бы эту тему, а просто бы им пользовался. И сужу просто -- идеальную вешь видно сразу и это никаких сомнений не вызывает. Как пропорции классической скульптуры. Ничего не добавишь, ничего не убавишь. Твой шаблон формы -- что типа кубизма -- экспрессия есть, формы нет.
Эээ..давай объективно о недостатках MACRO тогда, что ты под "формой" имеешь в виду? Тебе "форма" или "содержание" все же?
 

dark-demon

d(^-^)b
pachanga, оба варианта отличаются _исключительно_ типом скобочек. я не усматриваю в замене одних скобок на другие _абсолютно_ никакого смысла. именно это магическое действо и не нравится си. твой шаблон не является ни более компактным, ни более наглядным.
 

pachanga

Новичок
dark-demon
Я устал уже это повторять, но для особо одаренных повторю: MACRO генерирует PHP код и {{..}} макросы для формы связывают модель с компонентами формы как раз генерацией кода. Обычные html теги никак в этом процессе не участвуют. Кстати, в треде о MACRO я тебя _очень_ настоятельно просил, чтобы ты показал пример связи формы и модели в XSLT шаблоне. Ждем-с.
 

dark-demon

d(^-^)b
> MACRO генерирует PHP код и {{..}} макросы для формы связывают модель с компонентами формы как раз генерацией кода.

какой php код будет сгенерирован для указанного макро-кода?


> Кстати, в треде о MACRO я тебя _очень_ настоятельно просил, чтобы ты показал пример связи формы и модели в XSLT шаблоне.

санитар леса меня очень просил не писать в тот топик ничего на тему макро. впрочем, я тебе уже там ответил, что хэши ( массивы и объекты в пхп ) элементарно трансформируются в xml-дерево. для применения xslt из libxml этого вполне достаточно.
 

pachanga

Новичок
dark-demon
Примерно похож на тот, что указывал .C. А на счет форм и треда MACRO, тебя просили показать пример с формами задолго до просьбы. Но на это можешь не отвечать, чтобы не мусорить и в этом треде.
 

pachanga

Новичок
dark-demon
Ты вообще треды читаешь или просто пробегаешь глазами в поисках "кто тут покусился на XSLT"?

Вот что писал .C:
<? form::begin('MyForm') ?>
<form method=post>

<? form::element('Element1') ?>
...
 

dark-demon

d(^-^)b
pachanga, он писал про свой темплейтный движок. ты собираешься использовать свой шаблонизатор для генерации шаблонов для движка си?

сразу к вам обоим вопрос: вы действительно считаете, что, когда программисту потребуется добавить дополнительное поле, верстальщик должен лезть и исправлять каждый шаблон, где производится вывод этой формы? причём всё исправление будет заключаться исключительно в копипасте пары строчек и корректировке одного идентификатора.

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

С.

Продвинутый новичок
сразу к вам обоим вопрос: вы действительно считаете, что, когда программисту потребуется добавить дополнительное поле, верстальщик должен лезть и исправлять каждый шаблон, где производится вывод этой формы?
Во-первых, да именно так. Полностью автоматически генерирующиеся формы это утопия. Здесь не обсуждается.

Во-вторых, не "каждый шаблон", а просто "шаблон". Если форма одинаковая, то никто не будет ее ее описывать N раз. Реюзинг кода не является исключительным свойством XSLT.

В-третьих, что значит "когда программисту потребуется... верстальшик должен"? Эта философская ошибка уже была подмечена мной и озвучена ранее. В парадигме, обсуждаемой здесь, слугой явлется программист! Наоборот если верстальшику потребуется на основании изменений в ТЗ добавить поле, то программист должен обеспечить его обработку. И вот тут как раз и происходит "экономия"; при правильной написанной обработке форм практически ничего не нужно менять.
 

pachanga

Новичок
dark-demon
Я использовал код C. просто для примера, слезно умоляю, _читай_ треды.
 

dark-demon

d(^-^)b
> Полностью автоматически генерирующиеся формы это утопия.

обоснуй.


> не "каждый шаблон", а просто "шаблон". Если форма одинаковая, то никто не будет ее ее описывать N раз.

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

> Реюзинг кода не является исключительным свойством XSLT.

в ваших шаблонах я этого реюзинга в упор не наблюдаю.


> В парадигме, обсуждаемой здесь, слугой явлется программист! Наоборот если верстальшику потребуется на основании изменений в ТЗ добавить поле, то программист должен обеспечить его обработку.

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


pachanga, хорошо, я помогу тебе сделать этот шажок...
такой шаблон:
PHP:
{{input name='title' type='text' size='60'/}}
у тебя скорее всего конвертится во что-то вроде:
PHP:
<input name='title' type='text' size='60' value="<?=@$_REQUEST['title'];?>" />
так?
 

С.

Продвинутый новичок
dark-demon, "идеальный" в данное теме имеется в виду для верстальщика, а не для программиста. Идеальный шаблонизатор для программиста искать не надо, он создан и называется (фанфары!!!) XSLT.

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

pachanga

Новичок
dark-demon
Премного тебе благодарен за медвежью услугу, но в _твоей_ помощи не нуждаюсь.
 

dark-demon

d(^-^)b
угу, вот и получается, что верстальщик - это тупица, не способная освоить простейшие правила, которая управляет бизнес-логикой проекта...

однако проведя небольшое социологическое исследование интернета я пришёл к следующим выводам:
1. маленькие конторы берут в качестве верстальщика человека освоившего, либо способного освоить php+javascript ибо вёрстки мало, а коллектив маленький.
2. средние конторы под вакансией "верстальщик" подразумевают ещё и client-side программиста. однако, знание серверных технологий явлется большим плюсом.
3. только крупные конторы могут позволить себе отдельного верстальщика, который будет заниматься исключительно вёрсткой. но и требования у них жёсткие - тупица не пройдёт. в частности, одно из требований - хорошее знание xslt.

и тут возникает вопрос: а где в этой классовой иерархии место для верстальщика не способного освоить xslt?


ps: кстати, я-таки поддался на провокацию:
PHP:
function makexml( $var, $name='root' ){
	$xml= '';
	if( is_object( $var ) || is_array( $var ) ):
		foreach( $var as $n => $v )
			$xml.= makexml( $v, $n );
	else:
		$xml= htmlspecialchars( $var, ENT_NOQUOTES, 'UTF-8' );
	endif;
	if( is_numeric( $name ) ) $name= 'i';
	return '<'.$name.'>'.$xml.'</'.$name.'>';
}
рабочий пример
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху