За последние 24 часа нас посетили 17939 программистов и 1614 роботов. Сейчас ищет 1501 программист ...

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

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

  1. dark-demon

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

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    это плохая CMF. почитай это: http://mag.phpclub.net/2004/dec/phpi9_2004.pdf
    проще говоря, задавая что-либо "жёстко" ты усложняешь дальнейшую работу с фреймворком.
    хороший фреймворк должен быть гибким и не требовательным, он должен объединять множество модулей и приложений при этом быть минимально требовательным к их внутреннему устройству.
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Читал уже. Кодировка задаётся общая и в первую очередь это обусловлено тем, что данные из БД приходят в одной кодировке. А винегрет я считаю ни к чему. Погонишься за универсальностью, найдёшь ещё больше проблем в другом месте. Я для себя давно это уяснил.
     
  3. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Нет, это приходится делать в коде, хотя правильней было бы реализовать шаблонизатор с массивами таких параметров (надо придумать как задавать их в шаблоне, хоть {1|2|3|4}).
    Но уж лучше я буду писать это в коде, чем верстальщик в шаблоне, и потом за ним переделывать.
    если людям удалось скинуть с себя часть работы на другого - я рад за них.
    Я сам не верстаю вообще, это совсем не мое, но такие вещи уж лучше я сделаю. Или надо резко поднимать класс и затраченное время работающих над проектом людей.
     
  4. dark-demon

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

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    не относится ни к php ни к html =)
     
  5. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Встречный вопрос.
    PHP:
    1. if ($client_type==1) $descr=func1($cl_id);
    2. elseif($client_type==2) $descr=func2($cl_id);
    3.  
    4. function func1($cl_id) {
    5. $sql="..... from ,,,,,
    6. left join ....
    7. left join ....
    8. left join ....
    9. where $filter.$xtrawhere order by date limit 20"; //список закупок
    10.  
    11. .....
    12. }
    13.  
    14. function func2($cl_id) {
    15. return 'Вы не можете делать у нас закупки';
    16. }
    где это реализовывать?

    ps или "это слово встречалось в... "
     
  6. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну ладно, не суть. К CSS =) Но сути вопроса не меняет. Это относится к отображению, но не как не к управляющему коду.
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Я наоборот верстаю сам и почти никому кроме реально проверенных людей не доверю это ответственное дело.

    (многие считают что вёрстка это "элементарщина" с такими людьми я не работаю, как я на одном форуме сказал "работать с дураками себе дороже")
     
  8. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    я наоборот, потрачу на это слишком много времени, но такие вещи лучше сделаю сам.
     
  9. dark-demon

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

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

    Код (Text):
    1. <? if ($errors): ?>
    2.     выводим список ошибок
    3. <? endif; ?>
    4. <? if ($backet): ?>
    5.     выводим список закупок
    6. <? endif; ?>
    соответственно в программе генерируется либо один массив, либо другой. либо оба, если ошибки не исключают вывод списка закупок.

    заодно чередование цветов:

    Код (Text):
    1. <ul>
    2.     <? $i=0; foreach ($mass as $item): $i^=1; ?>
    3.         <li class="<?=$i?'even':'odd';?>"><?=$item;?></li>
    4.     <? endforeach; ?>
    5. </ul>
     
  10. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    это не корзина магазина в прямом виде.
    это карточка клиента, а в ней
    - такие клиенты как вы обычно покупают
    - ваши последние х покупок
    - последние товары которые вы смотрели
    - список ваших запросов
    - дофига чего еще.

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

    У меня реальные примеры "малость" посложнее, но я их тут приводить не буду.
     
  11. Anonymous

    Anonymous Guest

    Флудерасы вы. И охото так в понедельник напрягатся?
     
  12. dark-demon

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

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

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    так одно или другое? Где будет иф?
    А вот этот?
    HTML:
    1. {if $enableManagement == true}<a href="link.php?act=manage"><img src="img/ico.edit.gif" border="0"></a>&nbsp;{/if}
    вот это кто пишет? дизайнер?
    тогда тащи его на этот форум.
    а если не он, тогда твой шаблон к ХТМЛю не имеет никакого отношения, это дополнительный псевдокод, в который ты преобразуешь ХТМЛ. Есть время полностью переделывать дизайн и требовать такой же при смене шкуры - ради бога.

    И кто будет разбирать это после тебя, дизайнер или кодер?
     
  14. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. <ul>
    2. <?foreach ($mass as $n => $item):?>
    3. <li style="background: <?if($n % 2):?>#cecece<?else?>#fefefe<?end?>"><?=$item;?></li>
    4. <?end?>
    5. </ul>
    Верстальщик в любом случае должен получить азы работы с шаблонами. Они как правило знакомы с JS, и изучить азы PHP им не представится трудным.
    Код (Text):
    1. <?if($n % 2):?>#cecece<?else?>#fefefe<?end?>
    Он один раз запомнит, запишет или заучит данную конструкцию и сможет свободно её использовать.
     
  15. dark-demon

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

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну, ессно в шаблоне:
    Код (Text):
    1. <? if ($parmissions['management']): ?>
    2.    <a href="link.php?act=manage"><img src="img/ico.edit.gif" border="0"></a>&nbsp;
    3. <? endif;?>
    это был бы идеальный вариант :) но иным дизайнерам бывает сложно объяснить, что в вебе нет тех средств надругательства над шрифтами, с коими он привык работать в фотошопе ;-) поэтому такими вещами занимается верстальщик, а оный либо отлично владеет копипастом, либо-таки способен освоить простейшие конструкции.

    ну да, это и называется "шаблон" :)
     
  16. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    и который должен минимально отличаться от нарезки.
     
  17. dark-demon

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

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

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

    С нами с:
    26 авг 2007
    Сообщения:
    32
    Симпатии:
    0
    Класс конвертирования между системами счисления. 2x, 8x, 16x, 10x и римская))))))))))))))))
    PHP:
    1.  
    2. <?php
    3.  
    4. class convert
    5. {
    6.     function convert($from, $to, $arg){
    7.         switch ($from){
    8.         case 2:
    9.         $arg = bindec($arg);
    10.         break;
    11.         case 8:
    12.         $arg = octdec($arg);
    13.         break;
    14.         case 16:
    15.         $arg = hexdec($arg);
    16.         break;
    17.         case 'x':
    18.         $arg = convert::fromx_to_10($arg);
    19.         break;
    20.         }
    21.         switch($to){
    22.         case 2:
    23.         $arg = decbin($arg);
    24.         break;
    25.         case 8:
    26.         $arg = decoct($arg);
    27.         break;
    28.         case 16:
    29.         $arg = dechex($arg);
    30.         break;
    31.         case 'x':
    32.         $arg = convert::from10_to_x($arg);
    33.         break;
    34.         }
    35.         return $arg;
    36.     }
    37.  
    38.     function get_elements($arg)
    39.         {
    40.         $elResult[] = $arg % 10;
    41.         $arg = $arg - $arg % 10;
    42.         //$elResult[] = $arg % 50;
    43.         //$arg = $arg - $arg % 50;
    44.         $elResult[] = $arg % 100;
    45.         $arg = $arg - $arg % 100;
    46.         //$elResult[] = $arg % 500;
    47.         //$arg = $arg - $arg % 500;
    48.         $elResult[] = $arg % 1000;
    49.         $arg = $arg - $arg % 1000;
    50.         $elResult[] = $arg % 10000;
    51.  
    52.         rsort($elResult);
    53.         return $elResult;
    54.         }
    55.  
    56.     function replace($arr)
    57.         {
    58.          foreach($arr as $key => &$value){
    59.             switch($value){
    60.                 case 1:
    61.                 $res = $res . "I";
    62.                 break;
    63.                 case 2:
    64.                 $res = $res . "II";
    65.                 break;
    66.                 case 3:
    67.                 $res = $res . "III";
    68.                 break;
    69.                 case 4:
    70.                 $res = $res . "IV";
    71.                 break;
    72.                 case 5:
    73.                 $res = $res . "V";
    74.                 break;
    75.                 case 6:
    76.                 $res = $res . "VI";
    77.                 break;
    78.                 case 7:
    79.                 $res = $res . "VII";
    80.                 break;
    81.                 case 8:
    82.                 $res = $res . "VIII";
    83.                 break;
    84.                 case 9:
    85.                 $res = $res . "IX";
    86.                 break;
    87.                 case 10:
    88.                 $res = $res . "X";
    89.                 break;
    90.                 case 20:
    91.                 $res = $res . "XX";
    92.                 break;
    93.                 case 30:
    94.                 $res = $res . "XXX";
    95.                 break;
    96.                 case 40:
    97.                 $res = $res . "XL";
    98.                 break;
    99.                 case 50:
    100.                 $res = $res . "L";
    101.                 break;
    102.                 case 60:
    103.                 $res = $res . "LX";
    104.                 break;
    105.                 case 70:
    106.                 $res = $res . "LXX";
    107.                 break;
    108.                 case 80:
    109.                 $res = $res . "LXXX";
    110.                 break;
    111.                 case 90:
    112.                 $res = $res . "XC";
    113.                 break;
    114.                 case 100:
    115.                 $res = $res . "C";
    116.                 break;
    117.                 case 200:
    118.                 $res = $res . "CC";
    119.                 break;
    120.                 case 300:
    121.                 $res = $res . "CCC";
    122.                 break;
    123.                 case 400:
    124.                 $res = $res . "CD";
    125.                 break;
    126.                 case 500:
    127.                 $res = $res . "D";
    128.                 break;
    129.                 case 600:
    130.                 $res = $res . "DC";
    131.                 break;
    132.                 case 700:
    133.                 $res = $res . "DCC";
    134.                 break;
    135.                 case 800:
    136.                 $res = $res . "DCCC";
    137.                 break;
    138.                 case 900:
    139.                 $res = $res . "CM";
    140.                 break;
    141.                 case 1000:
    142.                 $res = $res . "M";
    143.                 break;
    144.                 case 2000:
    145.                 $res = $res . "MM";
    146.                 break;
    147.                 case 3000:
    148.                 $res = $res . "MMM";
    149.                 break;
    150.                 }
    151.  
    152.          }
    153.          return $res;
    154.         }
    155.         function from10_to_x($arg){
    156.             $resut = convert::get_elements($arg);
    157.             $result = convert::replace($resut);
    158.             return $result;
    159.         }
    160.         function fromx_to_10($str){
    161.             $str=strtoupper($str);
    162.  
    163.  
    164. $arrr=array("F","Y","Z","J","B","N","P");
    165. $arrt=array("I","V","X","L","C","D","M","F","Y","Z","J","B","N","P");
    166. $arrz=array("II","VV","XX","LL","CC","DD","MM");
    167. $arrs=array("1","5","10","50","100","500","1000","2","10","20","100","200","1000","2000");
    168. for($i=0; $i<=6; $i++){
    169. $var1=$arrz[$i];
    170. $var2=$arrr[$i];
    171. $str = str_replace($var1,$var2,$str);
    172. }
    173. $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
    174.  
    175. reset($chars);
    176.  
    177.  
    178.  
    179. foreach ($chars as $key => $value){
    180. for ($i=0; $i<=13;$i++){
    181. $var3=$arrt[$i];
    182. $var4=$arrs[$i];
    183. $chars[$key] = str_replace($var3,$var4,"$chars[$key]");
    184. }
    185. }
    186. reset($chars);
    187.  
    188. krsort($chars);
    189. foreach($chars as $key=>$value){
    190. if ($mean<=$value){
    191. $mean=$mean+$value;
    192. }
    193. else{
    194. $mean=$mean-$value;
    195. }
    196. }
    197.  
    198. return $mean;       }
    199.  
    200.  }
    201.  
    202. ?>
     
  19. Mavir

    Mavir Guest

    Как им пользоваться?

    Тест на правильность ;)
    PHP:
    1. <?
    2. for($i=1; $i<100; $i++){
    3.     print "$i - ".convert::from10_to_x($i)." - ".convert::fromx_to_10(convert::from10_to_x($i))."\n";
    4. }
    5. ?>
     
  20. Inakrin

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

    С нами с:
    26 авг 2007
    Сообщения:
    32
    Симпатии:
    0
    Да что-то кое-где криво работает) Поправим)
     
  21. Inakrin

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

    С нами с:
    26 авг 2007
    Сообщения:
    32
    Симпатии:
    0
    Тьфу, блин, breakи забыл поставить кое-где))))))))
    Поправил)))
     
  22. dark-demon

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

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    не, римская - это безпонтово :) замути лучше вавилонскую клинопись.
     
  23. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Когда неопытному пользователю предлагают форматировать текст BB тегами, он может запутаться и не закрывать открытые, или закрывать неоткрытые теги. При этом нарушается валидность кода страницы и может произойти дефейс.
    Если пользователь запутался и забыл поставить закрывающий, или открывающий BB тег, функция подставит незакрытые теги в конец, а если какой-либо тег был открыт, но не закрыт, то в начало подставляет открывающий тег. Жестчайше использует переборы массивов, но быстрее, чем та же реализация при помощи регулярок.

    В функцию передаются параметры:
    $str - текст, который нужно обработать.
    $open - все открывающие теги, которые нужно обработать
    $close - все закрывающие теги, которые нужно обработать. Должны следовать в том же порядке, что и открывающие. Тоесть, если нулевым элементом массива $open стоит тег '|b|', то в массиве $close нулевым должен быть. '|/b|' .

    Обычно BB обозначается '[/]', но так как этот форум обрабатывает их и внутри кода в функции, я ставлю именно '|/|'. Недоработка форума.
    PHP:
    1.  
    2. <pre>
    3. <?php
    4. function CheckTags($str, $open, $close)
    5. {  
    6.     foreach($open as $key => $value) $opencl[$key] = substr_count($str, $value);
    7.     foreach($close as $key => $value) $closecl[$key] = substr_count($str, $value);
    8.     foreach($opencl as $key => $value)
    9.     {
    10.         if($opencl[$key] > $closecl[$key])
    11.         {
    12.             $dif = $opencl[$key]-$closecl[$key];
    13.             for($d = 0; $d < $dif; $d++) $str .= $close[$key];
    14.         }
    15.         if($opencl[$key] < $closecl[$key])
    16.         {
    17.             $dif = $closecl[$key]-$opencl[$key];
    18.             for($d = 0; $d < $dif; $d++) $str = $open[$key].$str;
    19.         }
    20.     }
    21.     return $str;
    22. }
    23.  
    24. //Задаём все открывающие BB теги
    25. $open = array(
    26.  '|b|',
    27.  '|i|',
    28.  '|red|'
    29. );
    30.  
    31. //Теперь все закрывающие в том же порядке.
    32. $close = array(
    33.  '|/b|',
    34.  '|/i|',
    35.  '|/red|',
    36. );
    37.  
    38. //Задаём текст, который нужно обработать.
    39. $str = '|b|Жирний текст. Тут всё правильно.|/b|
    40. |i|Курсив. Здесь открывается, но не закрывается тег i
    41. И тут  закрывается некий неоткрытый тег, обозначающий красный шрифт|/red|';
    42.  
    43. //Посылаем только что заданные параметры функции.
    44. $str = CheckTags($str, $open, $close);
    45. //Всё, теперь можно заменять BB теги на HTML не рискуя потерять валидность.
    46. echo $str;
    47. ?>
    48. </pre>
    49.  
    Выводит:
    Код (Text):
    1. |red||b|Жирний текст. Тут всё правильно.|/b|
    2. |i|Курсив. Здесь открывается, но не закрывается тег i
    3. И тут  закрывается некий неоткрытый тег, обозначающий красный шрифт|/red||/i|
     
  24. dark-demon

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

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    1. не надо пользователя грузить бб-кодами. прикрутить визивиг - дело пяти минут.
    2. tidy с этой задачей справляется лучше.
     
  25. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    +Sten+
    А разве это правильный результат? У тебя получилось |red|...|i|...|/red|...|/i|.
    Полагаю, закрываться теги должны в обратном порядке, чтобы не было таких "нахлестов".
    Интересно, как твоя функция отреагирует на строку "|/b|...some text...|b|" ;)

    Э-э-э... а где у тебя задаются $from и $to?

    dark-demon
    Tidy не работает с BB тегами, только с HTML. И визивиг - среда для блондинок, иногда аккуратность выдачи важнее интуитивности редактирования.
    P.S. Опять у тебя новая подпись :roll: