Ноя 05
2008Кодлинч. Выпуск 1 – DLE.
Рубрики: (dle, КодЛинч 0.1 beta) Автор: phpdude 05-11-2008
Теги : dle, пиздец, Пиздец CMS'ы, пиздец снова это началось, полный пиздец
знаете, я часто сужу по коду, а не оболочке. возьмем DLE.
и эти парни называют этот движок модульным? да я бы в лицо им плюнул. какая нахуй модульность, говнокод одним словом.
Итак, приступим к делу. Возьмём любой сторонний скрипт, к примеру, скрипт который будет выводить да более знакомую и порядком, поднадоевшую фразу «Hello world».
Вот код скрипта:
<?php
echo ‘Hello world’;
?>Создадим текстовый документ, занесём туда эти строки и сохраним его с расширением php. Назовём наш файл, к примеру, test.php. Далее мы поместим наш файл с кодом в папку engine/modules/ и на этом можем считать, что половина дела сделана, самая лёгкая половина. Теперь нужно разрешить нашему скрипту выполняться в среде движка по определённому запросу. Для этого мы отредактируем файл engine.php, который располагается в папке engine. Откроем его любым текстовым редактором и в самом начале увидим длинную цепочку, состоящую из операторов «выбора» case. Здесь мы ставим задачку перед нашим движком, и ему приходится решать, какой модуль подгрузить в зависимости от переданных ему параметров. Для наглядности приведу пример. Вот мы вбиваем в адресной строке браузера ссылку следующего вида:
http://your_site.ru/index.php?do= registerЕсли вы знакомы с азами протокола tcp/ip, то вы с лёгкостью можете сказать, что по данной ссылке происходит передача переменной do со значением register на обработку сценарием index.php. Но в действительности данную строку будет обрабатывать не index.php, а файл engine.php, который благодаря функции включения (require_once) внедряется в index.php. Итак мы разобрались, каким образом переменные из браузера поступают в сценарий, теперь посмотрим как они обрабатываются. Открыв файл engine.php, мы в самом его начале можем увидеть следующую строку
if (isset ($_REQUEST['do'])) $do = $_REQUEST['do']; else $do = «»;она то и принимает на себя весь «огневой удар» переменных переданных из браузера, здесь как мы видим, в зависимости от того была ли переданная переменная сценарию или нет, происходит создание локальных переменных. Если переменная была передана, то мы создаём её локальный прототип и направляем в оператор switch. И там уже решается, какой модуль подгружать в зависимости от переданного параметра. В нашем случае мы передаём нашему сценарию значение register. Для этого случая предусмотрено подгружения модуля регистрации.
case «register» :
include ENGINE_DIR.’/modules/register.php’;
break;Из всего того что мы рассмотрели, можно сделать вывод, что для того чтобы наш скрипт был вызван по определённому запросу нужно просто-напросто добавить оператор case указывающий файл скрипта, который нужно подгрузить при определённом запросе.
Добавим после строк:
case «register» :
include ENGINE_DIR.’/modules/register.php’;
break;Строки подгружения нашего скрипта:
case «test» :
include ENGINE_DIR.’/modules/test.php’;
break;Теперь при запросе из адресной строки браузера по ссылки
http://your_site.ru/index.php?do= testбудет выполняться ваш скрипт, но вот беда, строка Hello world выводится вне контента в самом верху сайта. Это не то, что вы ожидали? Мда, те шаги что мы проделали не последние. Придётся ещё немного потрудится. DataLife имеет шаблонную структуру и поэтому нам придётся для своего модуля создать шаблон, чтобы все данные которые выводятся после выполнения нашего скрипта, оказались в пределах контента. Для этого создадим простейший tpl файл, который будет содержать следующее:
<html>
<body>
{test}
</body>
</html>Файл назовём test.tpl и поместим его в папку содержащую файлы шаблона сайта, к примеру в /templates/Default.
Далее мы откроем наш файл со скриптом и не много его отредактируем чтобы все его данные выводились в нашем шаблоне (test.tpl).<?php$test = ‘Hello world’;
// Подгружаем шаблон
$tpl->load_template(‘test.tpl’);
$tpl->set(‘{test}’, $test);
$tpl->compile(‘content’);
$tpl->clear();
?>Скрипт не много усложнился, но не более того. Воспользовавшись встроенным шаблонизатором мы подгружаем наш шаблон, затем заменяем в нём строку
{test}на значение переменной нашего скрипта. Далее мы указываем, что наш шаблон должен располагаться в контенте сайта, и в завершение вызываем метод
(clear();)Вот теперь у вас есть работающий пример создания модуля для DataLife. Я разобрал простейший пример, но этого вполне достаточно, чтобы понять механизм внедрения в движок стороннего скрипта. Для полного завершения нужного проделать ещё несколько операций, а именно сделать доступность данного модуля по красивой ссылки применив чпу. Для этого в корне сайта мы найдём файл .htaccess откроем его текстовым редактором и в конце файла перед строкой
#?>добавим:
# вывод тестового модуля
RewriteRule ^test(/?)+$ /?do=testБлагодаря этой строчки ваш скрипт будет доступен по ссылкам:
http://your_site.ru/index.php?do= testи
http://your_site.ru/ testИ наконец, чтобы антивирус движка не ругался при сканирование сервера, нужно отредактировать файл antivirus.php, располагающийся в папке engine/ajax.
Открываем его в текстовом редакторе, и в длинную череду данных массива
$good_filesвставляем строку:
«./engine/modules/test.php»,
Вот теперь ваш первый модуль имеет полную завершённость и вы можете насладится своим успехом в программирование под DataLife. Желаю успехов в постижение нового.
взял тут http://diz1.org/2008/02/13/uchimsja-pisat-moduli-dlja-datalife.html
после этой вот строки.
Но в действительности данную строку будет обрабатывать не index.php, а файл engine.php,
я понял что дальше читать ВОООБЩЕ не стоит и самое то хуевое что я понял – то, что опять придется в куче навоза возиться …. это пиздец, парну ни не можете ли вы скан директории с модулями чтоли сделать, хендлеры чтоли повесить или тп, блядь уродство, а не модульная система. нет что вообще нормальных программистов то? пиздец одним словом.
попробуйте меня переубедить, если я неправ.
UPD:// в догонку
http://4dle.ru/2007/06/28/uchimsja_pisat_moduli_s_adminpanelju_dlja_dle.html
не ну это пиздец, а не модульность. я вот только не понимаю как их УСТАНАВЛИВАТЬ обычному человеку?????????????????
UPD://код.
function echoheader($image, $header_text){
global $PHP_SELF, $skin_header, $member_db, $user_group;
$skin_header = preg_replace(«/{header-text}/», $header_text, $skin_header);
$skin_header = preg_replace(«/{user}/», $member_db[2], $skin_header);
$skin_header = preg_replace(«/{group}/», $user_group[$member_db[1]]['group_name'], $skin_header);
echo $skin_header;
}
УРОДЫ !!!!!!!!!!!!!!!!!!!!!!!! чо за олень так пишет? это не preg_replace, а str_replace!!!! ебанный в рот, а потом удивлюятся мол дле тормозит. а минус то этой регулярки в том, что {} они ни хуя неправильно используют
Всея ПЫХА
adw0rd
Мавр
ГО
Irinax
в оправдание такой «регистрируемой модульности» могу сказать, что это быстрее, чем скан директории. с другой стороны, заказчик может позабыть про скорость совсем, если желает использовать хоть какой-либо движок. для скорости лучше индивидуально под заказ. ну это ладно.
о чем базар, echoheader убил наповал!
скорость? вы в это верите? можно же закешировать сан директории и вот оно! скорость не падает, а за такой echoheader я бы руки оторвал и запихнул так сказать в горло.
вообще все движки пишут жесткими ногами насколько я вижу