компонентный подход, AJAX против шаблонов

grigori

( ͡° ͜ʖ ͡°)
Команда форума
(перенесено из компонентный подход, мвс и шаблоны)

Сейчас я пишу сайт с нативными шаблонами + AJAX (jQuery+Form+datepick).

Сами шаблоны лежат в папке со скриптом и называются так же (одна из целей активных шаблонов), но расширение .tpl
В скрипте готовлю глобальные переменные, а в конце - просто
error_reporting(E_ALL^E_NOTICE); //Smarty-style
include('index.tpl');

Формы пишутся как обычно, а обрабатываются проще.
Скрипт-обработчик форм выводит json_encode(массив_ошибок). Данные пользователя остались в форме.
$.each(errorsList,function(k,v){$("label[for="+k+"]").css("color","red")}) подсвечивает поля с ошибками,
.after('<div class=error>'+v+'</div>'); добавит описание ошибки под полем.

Никаких шаблонизаторов, сессий, value="{$userdata.filed_value}",
{if $birth_year_invalid}<tr><td class="error" colspan="3">Sorry, the year is invalid.</td></tr>{/if}
и
{html_select_date
prefix="date_from_"
start_year=2009
end_year=$end_year
time=$date_from|default:'0-0-0'
year_empty=''
month_empty=''
day_empty=''
}

Как же это удобно!
 

tf

крылья рулят
$.each(errorsList,function(k,v){$("label[for="+k+"]").css("color","red")}) подсвечивает поля с ошибками (),
.after('<div class=error>'+v+'</div>'); добавит описание ошибки под полем.
повторный вызов как будет убивать <div class=error> ?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: tf
повторный вызов как будет убивать <div class=error> ?
Код:
<div>
<label for=contest_name>Name:</label>
<input type="text" name="contest_name" id="contest_name"> <br>
</div>

    $("form").ajaxForm({
        success: formSubmitSuccess,
        dataType: 'json'
    });
function formSubmitSuccess(R){
    $("label").css("color","black");
    [b]$("div.error").remove();[/b]
    $.each(R,function(k,v){
        $("label[for="+k+"]").css("color","red").parent().append('<div class=error>'+v+'</div>');
    })
 

tf

крылья рулят
может я зря юзаю вывод ошибок перед строкой
только проблемы с версткой решать приходится...

-~{}~ 26.06.09 18:43:

<b> зря юзал :D
 

tf

крылья рулят
да да да, и еще верстальщика дергать если не так как ты подумал отображается?)))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
js добавляет логику в шаблоны, сверстаные верстальщиком
можно попросить нарисовать и сверстать ошибку для одного поля

а если "не так как я думал" отображается при выводе из PHP-скрипта, ты верстальщика не дергаешь?
 

tf

крылья рулят
в своих проектах нет, в админке своей тоже)))
интересно а такое сработает?
$.each(errorsList,function(k,v){$("label[for="+k+"]").addClass("error").after('<div class="error"></div>').attr('id', k).html(v)});
экспериментировать начинать неохото. увязну
 

Lightning

Трудоголик
Например отформатировать или раскрасить в зависимости от нескольких условий.
Раскрасить - логика представления. Получение условий - бизнес логика.
Или отобразить некоторые элементы управления, которые должны отображаться только определённой группе пользователей
Все, что касается прав пользователя, - управляющая логика (ИМХО). Но отображение - логика представления. Поэтому тут надо разделять.
Всё это бизнес логика отображения. Хочешь поместить её в представление? Тогда туда ещё нужно передавать данные, по которым должна отрабатывать бизнес логика, авторизован пользователь или нет, есть у него на счету деньги или нет, есть ли у него в ящике сообщение или нет...
Я не знаю, что такое "бизнес логика отображения". Есть бизнес логика, есть логика представления (отображения). Бизнес логику я не хочу помещать в представление.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
tf, сработает, но
1. по HTML-стандарту id должен быть уникален, а этот id у input,
проще другой аттрибут указать
2. так ты вставишь ошибку между label и input, можно так:
.before('<div class="error"></div>').prev().attr('lang', k).html(v);
 

tf

крылья рулят
ну работает и гуд, в реализации всегда можно error в конце поставить, один фиг я от топорного еще не скоро откажусь,
у input ведь не всегда будет label
<div><div class="errorDiv2" id="id_error"></div>
<textarea id='id'> </textarea><input type="hidden" id="old_id" value=" " /></div>
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
у input почти всегда будет заголовок, имя поля, которое можно выделить
это может быть соседний td, span, div, p, а
стандартом предусмотрен тэг label :)
 

crocodile2u

http://vbolshov.org.ru
grigori
http://plugins.jquery.com/project/smartform/ - использую такой подход уже довольно давно (JQuery-плагин, правда, только в этом январе подготовил). Собсно, очень похоже на твой способ.
 

tf

крылья рулят
понял о чем ты, да label упрощает жизнь вывода ошибок
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
crocodile2u
очень интересно, не видел твой плагин

я предпочитаю разделять JS-код и HTML, в т.ч. правила client-side валидации писать отдельно в массиве
нестандартные аттрибуты вроде <input validator="sf:email" мне не очень нравятся
а вот размер 4 кб нравится даже очень :)
 
Сверху