Авилум, Представьте, международный форум (не этот конечно — реальный), вы приходите на него, расставляете везде таблички с надписью "Template CMS". Народ ходит, но особо внимания не обращает. Тогда вы начинаете ставить таблички на проходе: чтобы люди через них падали. Ок, вы добились того, что на вас начали обращать внимание, но еще и материться. Вы стоите, чешите репу и думаете, что же не так.
В этот момент вы слышите, что несколько людей с коктэйлями начали тихо обсуждать системы управления. И сразу же мысль: "Вот оно! Здесь то я и пропиарюсь!". Подбегаете с табличками и ворохом картинок и начинаете тыкать практически в нос этим всем. Люди морщатся, рассматривают изображения, некоторые берут пробуют, говорят вам свое мнение, замечания... И тут вас несет... Вы еще больше начинаете забрасывать всех табличками. Уже не на шутку разозлились и орете на весь зал! Люди оборачиваются и с непониманием смотрят на вас. А ваши глаза уже налились яростью, негодованием, сумасшествием, вы в захлеб кричите, мол "Вы все идиоты! Мир уже не тот! Это заговор! Моя система все равно лучше! Идиоты, одумайтесь!".
Ох... А вы так и подкидываете пищу для троллей, потому что хочется чтобы топик постоянно апался.
Лучше движок пилите:
А то скоро будет что то вроде:
runHook('substr_function_run', $string);$string = substr($somevar, 5)runHook('substr_function_end', $string);
У вас парсится XML файл - на выходе получается древовидная структура классов. Очень даже реально, что занимать это все будет больше чем просто открыть файл.
мож он базы гугла умыкнул? 😂
Естественно по-хорошему нужна спецификация или видение проекта конечной системы. То есть для начала, перед тем как заняться кодом так сказать, нужно набросать план строительства. Что куда будет подключаться, что откуда будет брать данные, решить проблемы на бумаге, набросать БД. Определиться с выбором технологий, которые будут применяться при разработке.
Когда это будет сделано, тогда лучше всего поднять SVN. Можно поработать на Google Code. Есть список задач (Issues). Набрасываете план в список задач, садите 2 человек, даете доступ к SVN, раздаете задания и вперед... Когда возникает идея о новом функционале или находится баг: кидаете новую задачу в Issues: пускай решают.
Собственно лучше разработку ограничивать по временным срокам. То есть на месяц нужно успеть доделать какую то функционирующую часть. Это так сказать глобальная задача. Ну и к сроку они должны порешать определенные задачи из плана.
Как то так. Поправьте, если я ошибся.
/** * Load current page * @global string $defpage default page * @param array $data uri * @return string */ function lowLoader($data) { global $defpage; // If data count 2 then it has Parent/Child if(count($data) >= 2) { // If exists parent file if(fileExists(TEMPLATE_CMS_DATA_PATH.'pages/'.$data[0].'.xml')) { // Get child file and get parent page name $child_page = getXML(TEMPLATE_CMS_DATA_PATH.'pages/'.$data[1].'.xml'); // If child page parent is not empty then get his parent if($child_page->parent != '') { $c_p = $child_page->parent; } else { $c_p = ''; } // Check is child_parent -> request parent if($c_p == $data[0]) { // Checking only for the parent and one child, the remaining issue 404 if(count($data) < 3) { $id = $data[1]; // Get real request page } else { $id = 'error404'; statusHeader(404); } } else { $id = 'error404'; statusHeader(404); } } else { $id = 'error404'; statusHeader(404); } } else { // Only parent page come if(empty($data[0])) { $id = $defpage; } else { // Get current page $current_page = getXML(TEMPLATE_CMS_DATA_PATH.'pages/'.$data[0].'.xml'); if($current_page != null) { if($current_page->parent != '') { $c_p = $current_page->parent; } else { $c_p = ''; } } else { $c_p = ''; } // Check if this page has parent if($c_p !== '') { if($c_p == $data[0]) { if(file_exists(TEMPLATE_CMS_DATA_PATH.'pages/'.$data[0].'.xml')) { $id = $data[0]; } else { $id = 'error404'; statusHeader(404); } } else { $id = 'error404'; statusHeader(404); } } else { if(fileExists(TEMPLATE_CMS_DATA_PATH.'pages/'.$data[0].'.xml')) { $id = $data[0]; } else { $id = 'error404'; statusHeader(404); } } } } // Return page name/id to load return $id; }
Ок, залезь в PagesAdmin.php и ткни пальцем, где получаешь список всех-всех страниц.
Если у вас CMS для сайтов-визиток, тогда зачем вы анонсировали плагин форума?
OpenCart. Я не пользовался, но говорят вещь хорошая.
Я привел пример сайта, где используется mysql, который работает в разы быстрей сайта на XML, который можно легко расширить за счет уже обкатанных технологий.
Например, пускай программист не будет разбираться с кодом системы, если у него есть коннект к БД mysql, он может создать табличку и работать с нужными ему данными через человеческий SQL.
Пускай не MySQL, пускай даже SQLite2 (третью версию уже начинают поддерживать большинство серверов) — зато можно будет гарантировано избавить себя от кучи гемороя, который конечно же вылезет, когда вы начнете писать, например, тот же плагин форума для своей системы. Ладно проехали про SQL базы... Есть куча no-sql БД (или), которые даже не требуют от хостинга их поддержки. Как говорили выше, обычный serialize тоже в эту копилку.
Кстати, у меня была задача распарсить огромный XML файл (который получился на выходе из Access базы), SimpleXML падал, а вот DOM парсил до конца... Но все равно это жрало кучу ресурсов. Подумайте насчет целесообразности использования конкретно SimpleXML.
Потом уже если начали юзать XML, то почему бы не юзать XSLT?
А вообще вам больше в пиарщики нужно двигать... Нужно отдать должное: в раскрутке вы знаете толк. :)
@TiA, спасибо, запамятовал про б-деревья... Нужно матчасть подучить ;)
Сайт http://businessliga.dn.ua/
Три раза обновил код (можете открыть исходник в ФФ и пообновлять).
<!-- 3 querys, 0,007888 msec --> <!-- 3 querys, 0,004752 msec --> <!-- 3 querys, 0,005247 msec -->
Простой коннэкт к БД mysql через php-функции mysql_*. Тоже процедурный подход. Админка собрана "на коленке" и по сути чем то большим чем Template CMS не является, за исключением того, что я могу разработать и легко внедрить код, работающий с нормальной БД, где есть еще и кэширование запросов.
Прежде всего вы избавите программистов, которые будут писать плагины от следующего кода
if(function_exists('...'))
и внесете ясность где какой функционал. Тем более если ввести автозагрузку классов, то было б вообще гуд:
SomeClass::someFunction()
автолоадер один раз подтаскивает класс и все.
Я считаю явным недостатком использование процедурного подхода в WP, который очевидно вы взяли в пример.