Надоело один и тот же код писать Пример номер 1. На сайте создаём каталоги index.php PHP: <? $result=array(); // Главный буффер $_GET['module']=!$_GET['module']?false:$_GET['module']; // Переменная с названием модуля if($_GET['module']){ if(is_file($file="moduls/".basename($_GET['module'].".php"))){ // Если модуль существует include $file; // загружаем его }else{ $result['error']="Модуль не найден"; // если нет пишем ошибку в буффер } }else{ include "moduls/default_module.php"; // Если переменная с модулем не существует, загружаем модуль по умолчанию } print_r($result); // выводим значения буффера, по идее тут должен идти вывод в главный шаблон ?> Приложение: http://narod.ru/disk/10755376000/simple ... e.rar.html Пример номер 2 Сложный, поэтому он только в приложении поместился Принцип такой: Каждый модуль является набором действий, таким образом index.php предаются 2 переменные, с названием модуля и действие index.php дёргает модуль и дёргает действие, причём если модуль не существует то дёргается дефолтный модуль, если действие не существует, дёргается дефолтное действие Действие может вернуть 3 типа результата: массив - тогда его значения будут добавленны в шаблон действия ввиде переменных. true - тогда будет просто загружен шаблон. false - действие выполнится, но шаблон не будет загружен Все шаблоны в системе структурированны по именам как {названия модуля}_{название дейтвия}.tpl за исключением шаблонов main.tpl - самый главный шаблон сайта error.tpl - шаблон для системных сообщений default_index.tpl - шаблон дефольного модуля index.class.php, дефолтного действия ActionIndex() Каталоги Приложение: http://narod.ru/disk/10755390000/oppMod ... e.rar.html Предлогайте свои примеры
У меня пока действие возвращает все что угодно. Довольно гибко, но иногда путаешься. В принципе тоже хочу перейти на более типизированные результаты. А, отличие от твоего, как я понял у меня может возвратить вид. Действие не тянет вид по названию. Программист сам определяет какой вид или виды в этом действие обработать и обработать ли вообще. Но сейчас в основном возвращаются виды, массив ошибок и ничего. Хочу перейти на тенденцию типизации действий: запускаемые всегда, запускаемые по запросу пользователя, запускаемые по запросу приложения, запускаемые по умолчанию если первые три или один или как то так, отсутствуют.
kostyl а у меня тоже можно сделать чтобы действие вид возвращало например так: PHP: <? ActionSomething() { display::Buffering("someVar",display::TplOne(array("var"=>"value"),"my_file.tpl")); // добавляем в главный шаблон переменную someVar содержащую результат выполнения шаблона my_file.tpl return false; // чтоб шаблончик не грузило } ?> Ps/ Я пока ещё не встретил задачи не решаемой способом номер 2
я вообще AJAX модель использую. весь контент грузится конкретно в нужное место. никаких перезагрузок страниц. все подгружается только когда надо и куда надо. p.s. мне глубоко насрать на всяких там SEO и поисковики... и не надо тут флудить на эту тему. плз. /index.php PHP: <?php require_once('./enigma/start.php'); Enigma::Run(); require_once('./enigma/stop.php'); ?> /loader.php PHP: <?php require_once('./enigma/start.php'); $http = EnigmaHTTPRequest::GetInstance(); if($http->isPost()) { $cz = $http->GetPost('cz'); if(!empty($cz)) { $method = $http->GetPost('method','draw'); $html = Enigma::Run($cz,$method); print($html); } else { $http->Error('нет контент зоны!'); } } else { Enigma::Home(); } require_once('./enigma/stop.php'); ?> дальше просто пишу классы с нужными методами и НЕ парюсь ни о чем... enigmaczhello.php PHP: <?php class EnigmaCZHello extends EnigmaCZ { function __construct() { parent::__construct(); $this->file = __FILE__; } function Draw() { $tpl = $this->GetTemplate(); $html = $tpl->Parse('HELLO'); return $html; } } ?> hello.html HTML: <!-- BEGIN HELLO --> Hi! <!-- END HELLO -->
Я тоже как то писал сайт онли ajax, но бросил, юником меня добил. Остановился я на gzip, грузит не намного медленнее аякса ты видишь будущее? Слушай, а ты вроде обещал выложить этот движок?
autoload.php PHP: <?php /** * Автозагрузчик классов * * Используется для автоматической загрузки классов в код * * @package Enigma * @version 1.0 * @access public * @link [url=http://enigma.440hz.ru]http://enigma.440hz.ru[/url] * @license [url=http://enigma.440hz.ru/license]http://enigma.440hz.ru/license[/url] * @author Andrey Golubev <440hz@mail.ru> * @copyright 2008-2009 (c) 440hz * @version $Id: autoload.php 69 2008-03-02 11:05:24Z 440hz $ */ /** * получаем список файлов для сканирования * @param string $dir директория сканирования * @param array &$dirs массив для хранения сканированной информации * * @return void */ function __autoloadscanfiles($dir,&$dirs) { if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if($file[0] == '.') continue; $filename = $dir.$file; if(is_dir($filename)) __autoloadscanfiles($filename.'/',$dirs); if(is_file($filename)) { list($classname,) = explode('.',$file); if(!isset($dirs[$classname])) $dirs[$classname] = $filename; else die("Дубликат класса [{$classname}]. Источник [{$dirs[$classname]}]"); } } closedir($dh); } } } /** * * Автозагрузчик * * @param string $name имя класса для загрузки * * @return bool * @access public */ function __autoload($name='') { static $dirs = false; if(!$dirs) __autoloadscanfiles(ENIGMA_CLASS_ROOT.'/',$dirs); if($name == '') return $dirs; // получили имя класса $classname = strtolower($name); if(isset($dirs[$classname])) { require_once($dirs[$classname]); return true; } die("не могу загрузить класс [{$name}]"); } ?>
ну да. написать <div id="auth"></div> мне не сложно index.html HTML: <!-- BEGIN INDEX --> <center> <table width="800px" border="1"> <tr> <td align="left"> <div id="auth"></div> <script>$("#auth").EnigmaLoader('auth');</script> </td> </tr> </table> </center> <!-- END INDEX -->
Почти все понял только не понял, что происходит с этим: Код (Text): <script>$("#auth").EnigmaLoader('auth');</script> Туда пишется вызов соответствующий классу auth? А... Это потом парситься и вставляется JS вызова. А... Блин это ж jquery... Одно из требований JS вкл.
что ты делаешь с ссылками а админке это он загружает плагин авторизации вообще интересно как там админицо вот пример созрел у меня: есть ссылки например в меню, они грузят body а есть ссылки в блоке с анонсом новостей и в этом блоке могут быть ссылки и на разделы меню и на разделы этого анонса и как ты выбираешь что грузить body или блок с анонсом? вобщем, когда я аяксом увлекался с этим у меня были большие проблемы, приходилось писать везде что-то типа <a href="javascript" onClick="GoTo()"></a>
ну это уже де факто... я не видел того, кто выключает JS серфя в инете. ну разве что параноики, ну и бог с ними.
вообще впервые идею контент-зон (CZ) я услыл от Михаила Зеленского. Идея до сих пор меня вдохновляет. Имея ядро (а я имею), позволяющее заниматься проектрованием отдельных блоков сайта со своей логикой и взаимосвязями, НЕ затрагивающей основную логику, очень интересна, как в самой разработке, так и в модульной фрхитектуре/структуре и командной среде. Может уже есть такие движки, но я не видел. кто работал в командах, знает, как сложно урегулировать отношения при кривой архитектуре, а так каждый делает свой кусок НЕ пересекаясь с остальными.
да. ссылки все н ликабельные, но тоже можно выйти. http://domain.ru/modul/method/?params и там смотреть что вызвано. решаемо. не проблема.
440Hz Да. Отличный подход. +1000 (ps: Я о таком когда то думал.... но не знал я тогда о Ajax и все забыл...)
безусловно это не панацея для всех сайтов и решений. двигло пишется под заточку соц. сетей и аналогичные проекты. думаю, не удивлю никого, когда скажу, что уже давно аналитиками прощитано, что дальнейшее развитие инета уйдет в сторону "малых социльных групп". этозаконы развития как социума так и инета. иметь такой движок - значит "быть в теме". вспомни, как раньше, на сайты вешали форум, как обязательную фичу. теперь все хотят иметь свой собственный facebook (вконтакте/однокласники). при нормальном открытом API развитие такого движка обеспечится автоматом. если посмотреть куда все течет, то все хотят иметь свой контакт и свой ютьюб. ну так это как раз и не проблема, т.к. не требует мощностей и может спокойно развиваться. зачем грузитьаждый раз страницу? это ТРЕБОВАНИЕ поисковиков и SEO. Это большой бизнес и большие деньги. думаешь поисковики не могут выполнить страницу с JS и получить сгенерированный HTML ? Не смешите меня. тут все также как с топливными ресурсами и альтернативными источниками питания. Монополия и диктат и очень большие деньги. знаешь как поисковики стонут, что не могут интексировать тот же контакт? а поячему? да просто проиндексировав конткат они получат ВСЮ инфу и смугутр ее ПРОДАВАТЬ, а так инфой торгует конткат. основной критерий - БАБЛО! зачем сделали ЛИНУКС если была ФРЯ? - новых идей там нет как и небыло со времен первых версий онной. ответ прост - люди влезли на рынок и срубили бабла.
440Hz А ты не хочешь разработать библы, оширокопублить их и мастерить сервисы одни за другими(только бы идеи были), рубя бабло явно не топором?