ФорумПрограммированиеPHP для идиотов → Нативно-хуетивный шаблонизатор

Нативно-хуетивный шаблонизатор

  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 1 октября 2010 г. 8:43, спустя 1 минуту 43 секунды

    artoodetoo, я бы тебя как дизайнер-верстальщик послал тебя нахуй с таким шаблоном.
    Спустя 78 сек.
    artoodetoo, тогда нахуя вообще говорить о понятии шаблонизации?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 8:48, спустя 4 минуты 54 секунды

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

    взгляни на мой пример: шаблон как таковой не заморачивается закруткой ячеек по кругу. он просто выдает двухколоночную таблицу. НО в хелпере исходные данные переставляются местами так, чтобы создавалась нужная иллюзия. хелпер это часть представления, так же как шаблон часть представления ))) задача верстальщика сделать разметку и стили для таблички, а программер дает функцию-хелпер. усёк?
    ιιlllιlllι унц-унц
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 1 октября 2010 г. 8:52, спустя 4 минуты 11 секунд

    По мне нормальный шаблон это шаблон грубо такого формата:
    Лего читабелен / изменяем.


    <html>
    <title>#TITLE#</title>
    <body>
    <div id="today">
    {foreach key=key item=n from=$array_today}
    <div>{n.name}</div>
    {/foreach}
    </div>
    <div id="yesterday">
    {foreach key=key item=n from=$array_yesterday}
    <div>{n.name}</div>
    {/foreach}
    </div>
    </body>
    </html>
    Спустя 109 сек.
    Ладно чё я спорю, у каждого свой подход, но по мне мешать php с представлением данных - маразм полнейший.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 9:00, спустя 7 минут 37 секунд

    молодец. теперь вынеси стопудово повторяющуюся часть для всехстраничек

    <html>
    <title>#TITLE#</title>
    <body>
    ..
    </body>
    </html>

    в отдельный лэйаут

    теперь заметь, что текст внутри каждого foreach тоже повторяется — вынеси его в отдельный блок и получишь почти мой шаблон )))

    Спустя 182 сек.
    мой подход — не суть важно как писать
    <?php foreach ?>
    или
    {{foreach}}
    главное чтобы весь вывод был отдельно от добычи данных и проверки полномочий
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 октября 2010 г. 10:35, спустя 1 час 34 минуты 35 секунд

    Формировать правильный массив с данными нада заранее, а не через жопу, чтобы потом жопа была на шаблоне.

    а завтра тебя попросят вывести иначе эту сетку, и ты опять в контроллер полезешь?)
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 1 октября 2010 г. 10:37, спустя 2 минуты 15 секунд

    Абырвалг, пздц ребят. шаблон для того чтобы выносить на него данные, а не для того чтобы извлекать из базы данные /обрабатывать и выводить их тудаже.
    Вы мне ща пытаетесь доказать схему, где сплю там и сру.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 1 октября 2010 г. 10:42, спустя 5 минут 29 секунд

    извлекли данные из базы/носкл и передали в шаблон. А там ебись как хош, но выведи как нужно
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 11:10, спустя 27 минут 31 секунду

    artoodetoo, я тут тебя поддерживаю - запиздячить в контроллере или в каком-то посреднике-хелпере половину обработки и пошло оно все в хуй.
    Абырвалг, а куле и не полезть в контроллер, если нужно "завтра" поменять вывод? Ведь это индивидуальная и не стандартная фишка, и делают её в 99% случаев один раз и навсегда. А ежели делать что-то вечно меняющееся, то… то один хуй что в шаблоне будет каша, что в контроллере. А уж тем-более однохуйственно где (в каком из файлов, а точнее даже как именно он будет называться) нужно будет эти данные изменить.

    п.с. А вот по вопросу Вася_ц, то думаю таки не особо круто будет делать "двойную" обработку шаблонов, так как в большинстве случае шаблон представляет из себя простенькую структуру вывода, где по сути никаких пыхо-функций внутри не задействовано (кроме банальных "if/else") и нахуй лишний раз нагружать систему. Но, если у проекта почти все данные выводяться "житрожопо", то вполне возможно что смысл таки есть.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 12:19, спустя 1 час 8 минут 42 секунды

    artoodetoo, респект, конечно, ща я погоняю и посмотрю внимательней твой пример.
    Но все-таки на вскидку, мне кажется, что вы все совершаетет одну ошибку.
    А именно исходите из прадигмы, что для шаблона достаточно разделить массив на несколько кусков и каждый кусок передать в свою часть шаблона.
    В идеальном мире это так, а вот в реально не совсем.
    Ибо HTML так устроен, что для нормального отображения мало иметь куски данных. Надо еще отрендерить то, что между этими кусками, а оно зависит от того какого они размера.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 12:43, спустя 24 минуты 5 секунд

    А вообще, мне понравилось решение. Если бы высота контента каждого дня была бы одинаковой, то вообще было бы отлично. Blitz, конечно круче, но бутылку вискаря привезу, разопьем … только приезжай на пыхослет. )))))
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 12:46, спустя 3 минуты

    На картинке, показал красным, где вылазят из-за описанного выше огрехи.
    И зеленым, как сформировать таблицу, чтоб их не было.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 12:52, спустя 6 минут 44 секунды

    погоняй, может быть я не настолько неправ ;)
    "на мой глаз" достаточно выровнять так, чтобы разница между правой и левой колонкой была не более одного дня.
    ещё чуть-чуть улучшить можно навернув  еще один уровень TD: левую и правую колонки целиком подравнять через vertical-align: middle.
    это уже чисто стилистические ухищрения, я не заморачивался настолько глубоко.


    поздно ответил :)
    да, с разновысотными днями не очень красиво
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 12:58, спустя 5 минут 49 секунд

    Если стремиться к абсолютному совершенству, придется считать отдельные строки и заботиться о вертикальном ритме. … и, видимо, это несовместимо с переносами строк.
    ιιlllιlllι унц-унц
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 13:09, спустя 11 минут 5 секунд

    Нет я строки не считаю. Может быть в следующей версии. Считаю только даты, из-за этого разрыв в кольце может быть непрогнозируемой высоты. С этим пока смирился. Кстати, мой контроллер на Блитце. Шаблон уже приводил. Ну не красота ли? Насколько меньше кода, все вместилось в один небольшой класс с двумя методами. Плюс там еще всякие фишки, где стрелочки рисовать, где нет и.т.д Шаблон я уже приводил выше, вот контроллер:


    class SportCalendar
    {
    /*
    $matches - ссылка на индексированный массив матчей, формата:
    Array(
       [0] => Array(
               [Date] => 15.10.2009
               [Timestamp] => 1255550400)
       [1] => Array(
               [Date] => 15.10.2009
               [Timestamp] => 1255550400))
    $bt - blitz
    $controler - функция обработчик конкретного матча
    */
    private function parsematches($indexes, &$matches, &$bt, &$controler, $context)
    {
    foreach($indexes as $index)
    {
    $bt->block($context.'/match', array('match' => call_user_func($controler, $matches[$index])));
    }
    }


    public function parse(&$matches, &$bt, $controler)
    {
    $timestamp = time();

    $first = current($matches);
    $delta = abs($timestamp - $first['Timestamp']);
    $currentdate = false;
    $now = $j = 0;
    for($i=0, $size=sizeof($matches); $i<$size; $i++)
    {
    if ($currentdate != $matches[$i]['Date'])
    {
    $dates[$j++] = array('Date' => $matches[$i]['Date'], 'matches' => array($i));
    $currentdate = $matches[$i]['Date'];
    }
    else
    {
    $dates[$j-1]['matches'][] = $i;
    }

    $new = abs($timestamp - $matches[$i]['Timestamp']);
    if ($new < $delta)
    {
    $now = $j-1;
    $delta = $new;
    }
    }

    $length = sizeof($dates);
    $half = floor(($length-1)/2);

    $bt->block('now', $dates[$now]);

    self::parsematches($dates[$now]['matches'], $matches, $bt, $controler, 'now');

    $leftseparator = $rightseparator = false;

    if ($now > 0)
    {
    $bt->block('topleft');
    $leftseparator = $now < $half;
    for($i=$now-1, $j=0; $i>=0 && $j<$half; $i–, $j++)
    {
    $bt->block('leftfinished', $dates[$i]);
    self::parsematches($dates[$i]['matches'], $matches, $bt, $controler, 'leftfinished');
    }
    for($l=0; $l<=$i ;$l++)
    {
    $bt->block('rightfinished'.($now != $length - 1 ? '' : 'last'), $dates[$l]);
    self::parsematches($dates[$l]['matches'], $matches, $bt, $controler, 'rightfinished'.($now != $length - 1 ? '' : 'last'));
    }
    }

    if ($now < $length-1)
    {
    $bt->block('topright');
    $rightseparator = $now > $half;

    for($i=$now+1, $j=0; $i<$length && $j<$half; $i++, $j++)
    {
    $bt->block('rightplanning', $dates[$i]);
    self::parsematches($dates[$i]['matches'], $matches, $bt, $controler, 'rightplanning');
    }
    for($l=$length-1; $l>=$i; $l–)
    {
    $bt->block('leftplanning'.($now ? '' : 'first'), $dates[$l]);
    self::parsematches($dates[$l]['matches'], $matches, $bt, $controler, 'leftplanning'.($now ? '' : 'first'));
    }
    }

    $bt->setGlobal(array('leftseparator' => $leftseparator, 'rightseparator' => $rightseparator, 'bottom' => $leftseparator ||  $rightseparator));
    }
    }
  • Дмитрий

    Сообщения: 252 Репутация: N Группа: Адекваты

    Spritz 18 октября 2010 г. 10:15, спустя 16 дней 21 час 6 минут

    шаблон в первую очередь для того что бы разграничить работу программиста и верстальщика.. ну повелось это я вам скажу от америкосов где очень конкретная специлизация если он прогер на пыхе, то не полезит в html и css там свой прогер в компаниях, поэтому восновним в шаблонизаторах западников, делаеться ударение на разделение кода php и скриптов от кода разметки html и css/

Пожалуйста, авторизуйтесь, чтобы написать комментарий!