За последние 24 часа нас посетили 22534 программиста и 1143 робота. Сейчас ищут 870 программистов ...

Наши программы!!! (неразобранное)

Тема в разделе "Решения, алгоритмы", создана пользователем Hight, 28 авг 2006.

  1. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Я писал лишь из-за того, что short_tags on надо использовать в шаблонах. А в скриптах short_tags off.
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну так и включил бы short_tags...
     
  3. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    спасибо, посмотрю.


    Плохо позволяет нарастить функционал. Хотя бы для использования циклов.
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Его цель примитив а не функционал (это скрипт из статьи подобной той на которую я дал ссылку и не предназначен для использования а только для иллюстрации)
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Каюсь, не заглянул в маны.
     
  6. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    не вижу темы для обсуждения.
    Цель моего понятна - обеспечить независимость от платформы.
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну, коли пошла такая пьянка, то вот и мой php-native шаблонизатор:
    Код (Text):
    1.   function inc ($scriptPath) {
    2.       static $exeCounter= 0;
    3.       ++$exeCounter;
    4.       $scriptArgs= func_get_args();
    5.       $scriptPath= realpath($scriptPath.'.inc');
    6.       $Path= dirname($scriptPath).'/';
    7.       ob_start();
    8.           $rets= include ($scriptPath);
    9.       $obs= ob_get_clean();
    10.       return ($obs==='') ? $rets : $obs;
    11.   }
    шаблон:
    Код (Text):
    1.  <? extract($scriptArgs[1]) ?>
    2. <?='<?xml version="1.0" encoding="' . $_encoding . '"?>';?>
    3. <rss version="2.0"
    4.     xmlns:content="http://purl.org/rss/1.0/modules/content/"
    5.     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    6.     xmlns:dc="http://purl.org/dc/elements/1.1/"
    7.     >
    8. <channel>
    9.     <title><?=$title;?></title>
    10.     <link>http://<?=$_SERVER['HTTP_HOST'];?></link>
    11.     <description><?=$desc;?></description>
    12.     <generator><?=$gen;?></generator>
    13.     <language><?=$lang;?></language>
    14.  
    15.     <? foreach ($items as $item): ?><item>
    16.         <title><?=$item['title'];?></title>
    17.         <link><?=$item['link'];?></link>
    18.         <pubDate><?=_rfcDate($item['date']);?></pubDate>
    19.         <description><![CDATA[<?=$item['desc'];?>]]></description>
    20.         <content><![CDATA[<?=$item['msg']?>;]]></content>
    21.     </item>
    22.     <? endforeach; ?>
    23.  
    24. </channel>
    25. </rss>
    использование:
    Код (Text):
    1.   $pars= array();
    2. $pars['title']= 'Test RSS Feed';
    3. $pars['desc']= 'RSS Feed generated by PHPS Parser 1.0';
    4. $pars['gen']= 'PHPS Parser 1.0';
    5. $pars['lang']=  'RU';
    6.  
    7.   $items = array();
    8.  
    9.   // Test data
    10.   for ($i = 0; $i < 3; $i++) {
    11.       $items[] = array(
    12.               'title' => 'Title #' . $i,
    13.               'link'  => 'http://localhost/news/' . $i . '/',
    14.               'date'  => time() + $i * 10,
    15.               'desc'  => 'Description #' . $i,
    16.               'msg'    => 'Message #' . $i,
    17.           );
    18.   }
    19. $pars['items']= $items;
    20.  
    21. inc ('out/rss',$pars)
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    dark-demon
    PHP:
    1. <?=_rfcDate($item['date']);?>
    Заменить забыл на
    PHP:
    1. <?=date('r', $item['date']);?>
    И забыл
    PHP:
    1. <?global $_encoding;?>
     
  9. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Sergey89, не суть важно :) вообще, тут лучше использовать два вложенных шаблона - один формирует хидеры http и xml, а другой собственно тело документа.

    ps: и никаких global в шаблоне быть не должно...
     
  10. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    http://www.massassi.com/php/articles/template_engines/
    посмотрел.
    Ничего не увидел.
    Функционал такой же.
    Смысл шаблонизатора по сравнению с чистым пхп:
    1) Разделение ХТМЛ разметки и кода - целиком. Они пишутся разными людьми с по-разному устроенными мозгами.
    Дизайнер не должен писать <? foreach(...
    ... if (..) ?> <table ...> <? } ?> <tr>
    а кодер не должен описывать условие выполнения между <tr style="padding:..."><td><div ...>
    Разделение логики функционала и отображения (холивар смарти) стоит обсудить отдельно.
    2) Упрощение обработки таблиц в цикле.

    HTML:
    1. <!-- BEGIN row -->
    2.     <tr bgcolor="{BGCOLOR}"
    3.      onMouseOver="javascript: this.style.background={BGCOLOR1}"
    4.      onMouseOut="javascript: this.style.background='{BGCOLOR}'"
    5.      >
    6.       <td align=center>{II}</td>
    7.       <td align=center><b style='color: #283C42'>{CL_ID}</b></td>
    8.       <td align=center>{CL_REG_DATE}</td>
    9.       <td align=center>{STATUS}</td>
    10.       <td>{CL_FIO}</td>
    11.       <td>{CL_TEL}</td>
    12.       <td align=center>{ON_ICON}</td>
    13.       <td align=center>{CL_ONTIP_ICO}</td>
    14.       <td>{CL_ADRES}</td>
    15.   <td align=center><a title="карточка клиента" href=mylink&id={CL_ID}><img src=img/ico.edit.gif border=0></a></td>  
    16.     </tr>
    17. <!-- END row -->
    18.  
    Это пир.
    Верстальщик пишет это совершенно не задумываясь откуда что берется, а кодер НЕ ВИДИТ и не желает видеть как это будет в сборе и что как показывается.
    Смена шаблона может совершенно не менять пхп-код, даже если часть его будет работать впустую.

    Кешировать часто надо по изменениям, а не времени.
    Функция ->get() нужна чаще и возвращает строку, а сразу выводит функция ->show()
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    armadillo почуй разницу между активными и пассивными шаблонами. Ты привёл пример пассивного шаблона, я ниже пример активного.

    Был вариант:
    Код (Text):
    1. <?use $_encoding?>
    2. <?type 'text/xml'?>
    3. <?=_tag('xml version="1.0" encoding="' . $_encoding . '"')?>
    4. <rss version="2.0"
    5.     xmlns:content="http://purl.org/rss/1.0/modules/content/"
    6.     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    7.     xmlns:dc="http://purl.org/dc/elements/1.1/"
    8.     >
    9. <channel>
    10.     <?set 'info', $info?>
    11.     <?get 'info.tpl'?>
    12.  
    13.     <?foreach($items as $item):?>
    14.     <item>
    15.         <?set 'item', $item?>
    16.         <?get 'item.tpl'?>
    17.     </item>
    18.     <?end?>
    19.  
    20. </channel>
    21. </rss>
    Каждый шаблон имеет своё пространство имён. Поэтому мы и передаём туда данные принудительно из родительского шаблона. Насчёт global поясни.
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Обсуждалось и не раз, вывод везде один, разделение ПОЛНОСТЬЮ нереально (либо дизайнер пишет логику, либо программист пишет шаблоны, либо между ними ещё ставится верстальщик который пишет всякие "foreach if else итд" подгоняя дизайн под двиг)
     
  13. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а что тут пояснять? результат отработки шаблона должен зависеть только от переданных ему параметров, а не от погоды на марсе :) впрочем, global ещё можно обойти, а вот если в шаблоне используются static классы, то совсем туши свет...
     
  14. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    global - это своего рода захват параметров. Тоесть шаблон сам забирает переменную из вне. Я его применяю, когда хочу использовать в шаблоне какую-то системную переменную. Для передачи данных, предназначенных имено для вывода контента, используется Parser::setVar.
    Ещё раз говорю - это что-то вроде пространства имён. Чтобы функции применяемые в шаблоне не висели в глобальной области видимости.
     
  15. dark-demon

    dark-demon Активный пользователь

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



    ну а я ещё раз повторю, что AnySingleton::callMyFunction() ничем не лучше AnySingleton_callMyFunction()
     
  16. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    dark-demon с чего ты взял, что это синглетон? Это неймспэйс. Ты лучше скажи чем AnySingleton_callMyFunction лучше AnySingleton::callMyFunction?
     
  17. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Писал парсер для своего проекта CMF. Кодировка жёстко задавалась в настройках. Если бы я хотел использовать всюду в проекте разную кодировку, я бы и сделал, как ты сказал.
     
  18. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    банально потому, что в пхп нет "пространств имён" :) а "статические" классы фактически являются глобальныи объектами - синглетонами.

    одним символом меньше.
     
  19. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Синлетон, обязан гарантировать существования класса в единственной экземпляре.
    PHP:
    1. $tpl = new Parser();
    2. $tpl2 = new Parser();
    Где здесь пахнет синглетоном?

    Имено такой ответ я и готов был услышать.
     
  20. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    да, но это не означает что надо начхать на разделение и лепить вообще без цели.

    <!-- BEGIN row -->
    понятно и верстальщику и кодеру,
    HTML:
    1. </form>
    2.      {if $listCat != ""}
    3.        {foreach from=$listCat item=cat}
    4.         <tr bgcolor="#ffffff" onMouseOver="this.style.background='#dddddd'"  OnMouseOut="this.style.background='White'">
    5.           <td width=24 align="center" {if $cat.on_site_about == ''}bgcolor=gray{/if}>{$cat.on_id}</td>
    6.           <td align="center">
    7.           {if $cat.cn_type == '1'}<b>А</b>
    8.           {elseif $cat.cn_type == '2'}<b>Пр</b>
    9.           {elseif $cat.cn_type == '3'}<b>По</b>
    10.           {/if}
    11.           </td>
    12.  
    понятно только программисту.
    И лучше уж я сам это напишу, чем потом править за тем, что наворотит верстальщик, то есть основной смысл шаблонизатора исчезает.
    Если у тебя есть время полностью перелопачивать скинутую тебе нарезку - флаг в руки, а я лучше жене время уделю, а шаблон сделаю понятным для верстальщика и свою работу на него перекладывать не буду.
    Даже если иногда придется делать
    <span style="display:{CAT_TYPE1}>А</span>
    <span style="display:{CAT_TYPE2}>Пр</span>
    и обрабатывать условия отображения в коде. Тем более что в часто это условие задает какой запрос и бОльшая часть нагрузки должна работать, не надо отрабатывать все варианты.
    $tpl->setVariable("CAT_TYPE",func($cattype));
    где func - функция с другим шаблоном.
     
  21. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Как ты поступишь ситуации, применяя пассивные шаблоны, когда допустим надо вывести строки таблицы поочерёдно меняя цвет их фона?
     
  22. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Тоже спорное утверждение, (если уж моё мнение для тебя не авторитетно что вполне логично, оно даже для меня не авторитетно) почитай phpclub там много авторитетных мнений на эту тему

    Само собой не значит, а где я так сказал ?
     
  23. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    PHP:
    1.  $tpl->setCurrentBlock("row") ;
    2. $tpl->setVariable("BGCOLOR", getImpColor($с_imp_id)) ;
    3.       if($с_result_id != 0)
    4.       {
    5.         $tpl->setVariable("BGCOLOR", "#E8E8E8") ;
    6. }
    7. $tpl->parseCurrentBlock("row") ;
    8.  
    подавляющее большинство таких задач решается пассивными шаблонами.
    Как вынести этот функционал поудобнее - стоит обсудить.
     
  24. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    так в чем цель шаблонизатора?
     
  25. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    armadillo и где же здесь отделение кода от разметки?
    Код (Text):
    1. #E8E8E8
    Это по твоему не относится к HTML?