это плохая CMF. почитай это: http://mag.phpclub.net/2004/dec/phpi9_2004.pdf проще говоря, задавая что-либо "жёстко" ты усложняешь дальнейшую работу с фреймворком. хороший фреймворк должен быть гибким и не требовательным, он должен объединять множество модулей и приложений при этом быть минимально требовательным к их внутреннему устройству.
Читал уже. Кодировка задаётся общая и в первую очередь это обусловлено тем, что данные из БД приходят в одной кодировке. А винегрет я считаю ни к чему. Погонишься за универсальностью, найдёшь ещё больше проблем в другом месте. Я для себя давно это уяснил.
Нет, это приходится делать в коде, хотя правильней было бы реализовать шаблонизатор с массивами таких параметров (надо придумать как задавать их в шаблоне, хоть {1|2|3|4}). Но уж лучше я буду писать это в коде, чем верстальщик в шаблоне, и потом за ним переделывать. если людям удалось скинуть с себя часть работы на другого - я рад за них. Я сам не верстаю вообще, это совсем не мое, но такие вещи уж лучше я сделаю. Или надо резко поднимать класс и затраченное время работающих над проектом людей.
Встречный вопрос. PHP: if ($client_type==1) $descr=func1($cl_id); elseif($client_type==2) $descr=func2($cl_id); function func1($cl_id) { $sql="..... from ,,,,, left join .... left join .... left join .... where $filter.$xtrawhere order by date limit 20"; //список закупок ..... } function func2($cl_id) { return 'Вы не можете делать у нас закупки'; } где это реализовывать? ps или "это слово встречалось в... "
Ну ладно, не суть. К CSS =) Но сути вопроса не меняет. Это относится к отображению, но не как не к управляющему коду.
Я наоборот верстаю сам и почти никому кроме реально проверенных людей не доверю это ответственное дело. (многие считают что вёрстка это "элементарщина" с такими людьми я не работаю, как я на одном форуме сказал "работать с дураками себе дороже")
armadillo, я делаю примерно так: Код (Text): <? if ($errors): ?> выводим список ошибок <? endif; ?> <? if ($backet): ?> выводим список закупок <? endif; ?> соответственно в программе генерируется либо один массив, либо другой. либо оба, если ошибки не исключают вывод списка закупок. заодно чередование цветов: Код (Text): <ul> <? $i=0; foreach ($mass as $item): $i^=1; ?> <li class="<?=$i?'even':'odd';?>"><?=$item;?></li> <? endforeach; ?> </ul>
это не корзина магазина в прямом виде. это карточка клиента, а в ней - такие клиенты как вы обычно покупают - ваши последние х покупок - последние товары которые вы смотрели - список ваших запросов - дофига чего еще. а если каждая запись товара - это может быть не один запрос, если там сложный справочник. У меня реальные примеры "малость" посложнее, но я их тут приводить не буду.
armadillo, ну и? у меня формирование страницы состоит из двух разделённых этапов: 1. формировние данных. тут вся логика. на выходе получается гигантский массив содержащий все необходимые для вывода данные. 2. вывод данных. обычный статичный шаблон, который смотрит какие заданны подмассивы и если они заданы - выводит данные из них в соответствии с указанными подшаблонами.
так одно или другое? Где будет иф? А вот этот? HTML: {if $enableManagement == true}<a href="link.php?act=manage"><img src="img/ico.edit.gif" border="0"></a> {/if} вот это кто пишет? дизайнер? тогда тащи его на этот форум. а если не он, тогда твой шаблон к ХТМЛю не имеет никакого отношения, это дополнительный псевдокод, в который ты преобразуешь ХТМЛ. Есть время полностью переделывать дизайн и требовать такой же при смене шкуры - ради бога. И кто будет разбирать это после тебя, дизайнер или кодер?
Код (Text): <ul> <?foreach ($mass as $n => $item):?> <li style="background: <?if($n % 2):?>#cecece<?else?>#fefefe<?end?>"><?=$item;?></li> <?end?> </ul> Верстальщик в любом случае должен получить азы работы с шаблонами. Они как правило знакомы с JS, и изучить азы PHP им не представится трудным. Код (Text): <?if($n % 2):?>#cecece<?else?>#fefefe<?end?> Он один раз запомнит, запишет или заучит данную конструкцию и сможет свободно её использовать.
ну, ессно в шаблоне: Код (Text): <? if ($parmissions['management']): ?> <a href="link.php?act=manage"><img src="img/ico.edit.gif" border="0"></a> <? endif;?> это был бы идеальный вариант но иным дизайнерам бывает сложно объяснить, что в вебе нет тех средств надругательства над шрифтами, с коими он привык работать в фотошопе ;-) поэтому такими вещами занимается верстальщик, а оный либо отлично владеет копипастом, либо-таки способен освоить простейшие конструкции. ну да, это и называется "шаблон"
кому должен? XSLT - это тоже шаблон. и я бы даже сказал, лучший (несолько перегруженный, но идеи верные), если бы не ресурсоёмкость...
Класс конвертирования между системами счисления. 2x, 8x, 16x, 10x и римская)))))))))))))))) PHP: <?php class convert { function convert($from, $to, $arg){ switch ($from){ case 2: $arg = bindec($arg); break; case 8: $arg = octdec($arg); break; case 16: $arg = hexdec($arg); break; case 'x': $arg = convert::fromx_to_10($arg); break; } switch($to){ case 2: $arg = decbin($arg); break; case 8: $arg = decoct($arg); break; case 16: $arg = dechex($arg); break; case 'x': $arg = convert::from10_to_x($arg); break; } return $arg; } function get_elements($arg) { $elResult[] = $arg % 10; $arg = $arg - $arg % 10; //$elResult[] = $arg % 50; //$arg = $arg - $arg % 50; $elResult[] = $arg % 100; $arg = $arg - $arg % 100; //$elResult[] = $arg % 500; //$arg = $arg - $arg % 500; $elResult[] = $arg % 1000; $arg = $arg - $arg % 1000; $elResult[] = $arg % 10000; rsort($elResult); return $elResult; } function replace($arr) { foreach($arr as $key => &$value){ switch($value){ case 1: $res = $res . "I"; break; case 2: $res = $res . "II"; break; case 3: $res = $res . "III"; break; case 4: $res = $res . "IV"; break; case 5: $res = $res . "V"; break; case 6: $res = $res . "VI"; break; case 7: $res = $res . "VII"; break; case 8: $res = $res . "VIII"; break; case 9: $res = $res . "IX"; break; case 10: $res = $res . "X"; break; case 20: $res = $res . "XX"; break; case 30: $res = $res . "XXX"; break; case 40: $res = $res . "XL"; break; case 50: $res = $res . "L"; break; case 60: $res = $res . "LX"; break; case 70: $res = $res . "LXX"; break; case 80: $res = $res . "LXXX"; break; case 90: $res = $res . "XC"; break; case 100: $res = $res . "C"; break; case 200: $res = $res . "CC"; break; case 300: $res = $res . "CCC"; break; case 400: $res = $res . "CD"; break; case 500: $res = $res . "D"; break; case 600: $res = $res . "DC"; break; case 700: $res = $res . "DCC"; break; case 800: $res = $res . "DCCC"; break; case 900: $res = $res . "CM"; break; case 1000: $res = $res . "M"; break; case 2000: $res = $res . "MM"; break; case 3000: $res = $res . "MMM"; break; } } return $res; } function from10_to_x($arg){ $resut = convert::get_elements($arg); $result = convert::replace($resut); return $result; } function fromx_to_10($str){ $str=strtoupper($str); $arrr=array("F","Y","Z","J","B","N","P"); $arrt=array("I","V","X","L","C","D","M","F","Y","Z","J","B","N","P"); $arrz=array("II","VV","XX","LL","CC","DD","MM"); $arrs=array("1","5","10","50","100","500","1000","2","10","20","100","200","1000","2000"); for($i=0; $i<=6; $i++){ $var1=$arrz[$i]; $var2=$arrr[$i]; $str = str_replace($var1,$var2,$str); } $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); reset($chars); foreach ($chars as $key => $value){ for ($i=0; $i<=13;$i++){ $var3=$arrt[$i]; $var4=$arrs[$i]; $chars[$key] = str_replace($var3,$var4,"$chars[$key]"); } } reset($chars); krsort($chars); foreach($chars as $key=>$value){ if ($mean<=$value){ $mean=$mean+$value; } else{ $mean=$mean-$value; } } return $mean; } } ?>
Как им пользоваться? Тест на правильность PHP: <? for($i=1; $i<100; $i++){ print "$i - ".convert::from10_to_x($i)." - ".convert::fromx_to_10(convert::from10_to_x($i))."\n"; } ?>
Когда неопытному пользователю предлагают форматировать текст BB тегами, он может запутаться и не закрывать открытые, или закрывать неоткрытые теги. При этом нарушается валидность кода страницы и может произойти дефейс. Если пользователь запутался и забыл поставить закрывающий, или открывающий BB тег, функция подставит незакрытые теги в конец, а если какой-либо тег был открыт, но не закрыт, то в начало подставляет открывающий тег. Жестчайше использует переборы массивов, но быстрее, чем та же реализация при помощи регулярок. В функцию передаются параметры: $str - текст, который нужно обработать. $open - все открывающие теги, которые нужно обработать $close - все закрывающие теги, которые нужно обработать. Должны следовать в том же порядке, что и открывающие. Тоесть, если нулевым элементом массива $open стоит тег '|b|', то в массиве $close нулевым должен быть. '|/b|' . Обычно BB обозначается '[/]', но так как этот форум обрабатывает их и внутри кода в функции, я ставлю именно '|/|'. Недоработка форума. PHP: <pre> <?php function CheckTags($str, $open, $close) { foreach($open as $key => $value) $opencl[$key] = substr_count($str, $value); foreach($close as $key => $value) $closecl[$key] = substr_count($str, $value); foreach($opencl as $key => $value) { if($opencl[$key] > $closecl[$key]) { $dif = $opencl[$key]-$closecl[$key]; for($d = 0; $d < $dif; $d++) $str .= $close[$key]; } if($opencl[$key] < $closecl[$key]) { $dif = $closecl[$key]-$opencl[$key]; for($d = 0; $d < $dif; $d++) $str = $open[$key].$str; } } return $str; } //Задаём все открывающие BB теги $open = array( '|b|', '|i|', '|red|' ); //Теперь все закрывающие в том же порядке. $close = array( '|/b|', '|/i|', '|/red|', ); //Задаём текст, который нужно обработать. $str = '|b|Жирний текст. Тут всё правильно.|/b| |i|Курсив. Здесь открывается, но не закрывается тег i И тут закрывается некий неоткрытый тег, обозначающий красный шрифт|/red|'; //Посылаем только что заданные параметры функции. $str = CheckTags($str, $open, $close); //Всё, теперь можно заменять BB теги на HTML не рискуя потерять валидность. echo $str; ?> </pre> Выводит: Код (Text): |red||b|Жирний текст. Тут всё правильно.|/b| |i|Курсив. Здесь открывается, но не закрывается тег i И тут закрывается некий неоткрытый тег, обозначающий красный шрифт|/red||/i|
1. не надо пользователя грузить бб-кодами. прикрутить визивиг - дело пяти минут. 2. tidy с этой задачей справляется лучше.
+Sten+ А разве это правильный результат? У тебя получилось |red|...|i|...|/red|...|/i|. Полагаю, закрываться теги должны в обратном порядке, чтобы не было таких "нахлестов". Интересно, как твоя функция отреагирует на строку "|/b|...some text...|b|" Э-э-э... а где у тебя задаются $from и $to? dark-demon Tidy не работает с BB тегами, только с HTML. И визивиг - среда для блондинок, иногда аккуратность выдачи важнее интуитивности редактирования. P.S. Опять у тебя новая подпись :roll: