условные обозначения: [badNameList] - в данный момент index, modul, admin, captha, ajax, user, page [all] - любое строение и именование фалов\директорий {ext} - расширение файлов соответствующие определеннуму типу (к примеру видео, картинки, флеш) {name_1} - больше 3 меньше 32 символов, только английские буквы нижнего регистра, знак подчеркиванья. {name_2} - тоже самое что и {name_1} но можно использовать точку. {name_3} - тоже самое что и {name_1} но можно использовать верхний регистр. {controller} - контроллер *ограничения как у {name_2} {modul} - модуль контроллера *ограничения как у {name_2} {plugin_name} - тоже самое что и {name_2}, нельзя использовать в качестве имени [badNameList] {theme_name} - имя темы *ограничения как у {name_1} {lang_name} - имя языка *ограничения как у {name_1} {lang_fname} - либо {controller}.php либо {controller} . {modul}.php, исключение (core.php ***) {class_name} - имя класса *ограничения как у {name_3} {namespace} - пространство имен (с версии php5.3 можно юзать это счастье) {plugin_name} - имя плагина *ограничения как у {name_1} {hook_name} - больше 4 меньше 64 символов, только английские буквы нижнего регистра и точка. {user_id} - уникальный id пользователя {temp_name} - временное имя файла *ограничения как у {name_3}. /themes/{theme_name}/core.{controller}.{modul}.tpl - файл шаблона (то что его вызвало является частью ядра) /themes/{theme_name}/theme.{name_2}.tpl - не обязательный файл шаблона, подключается в других шаблонных файлах /themes/{theme_name}/{plugin_name}.{controller}.{modul}.tpl - файл шаблона пренадлежащий плагину с именем {plugin_name} /themes/{theme_name}/style/{name_2}.css - всякие css файлы /themes/{theme_name}/javascript/{name_2}.js - js файлы /themes/{theme_name}/language/{name_1}.php - доступные языки /themes/{theme_name}/image/[all] - картинки, по идее сюда можно положить что угодно /themes/{theme_name}/plugin/{name_2}.php - специфическая логика для данного шаблона (фишки, рюшки, расширение для компилятора шаблона) /themes/{theme_name}/flesh/{name_2}.{ext} - флешки /themes/{theme_name}/{theme_name}.php - информация о авторе и секция для действий инсталяции и деинсталяции (яз что там понадобится, так на всякий случай) /system/language/{lange_name}/{lang_fname} - файл с куском локализации /system/image/[all] - картинки что использует ядро /system/javascript/[all] - js скрипты для ядра /system/engine/class/{class_name}.php - файл с php классом /system/engine/class/{namespace}/{class_name}.php - файл с php классом что находится в {namespace} /system/engine/controller/{name_1}.php - контроллер /system/engine/moduls/{controller}/{name_1}.php - модуль контроллера {controller} /system/engine/compatibility.php - отвечает за проверку на совместимость /system/engine/function.admin.php - функции которые подключаются только для контроллера admin /system/engine/function.php - куча функций, используется везде где тока можно /system/config.php - типичный конфиг файл что нужно отредактировать перед работой с системой /plugins/{plugin_name}/{plugin_name}.php - файл с информацией для инсталяции и деинсталяции компонентов плагина (создание нужных таблиц, получение нужной инфы при установке, дефолтные настройки для acl) /plugins/{plugin_name}/hook.{hook_name}.php - файл плагина что используется системой как один из хуков /plugins/{plugin_name}/modul.{modul}.php - файл плагина что используется системой как модуль контроллера /plugins/{plugin_name}/language/{lang_name}.php - файл локализации /plugins/{plugin_name}/language/{name_1}.php - файл локализации, вызывается ручками из любого места текущего плагина /plugins/{plugin_name}/class/{plugin_name}_{class_name}.php - Класс доступен только в том случае если вызов произошел из файла что находится в нутри директории {plugin_name} /plugins/{plugin_name}/template/{plugin_name}.{controller}.{modul}.tpl - подключается в случае отсутствия файла с таким же именем в нутри активной темы. /plugins/{plugin_name}/template/[all] - все что надо для шаблона (картинки, скрипты, стили) /datas/cache - хранилище для файлового кеш драйвера и для компилятора шаблонов (все свалено без поддиректорий (имена файлов не md5, пример - config.core.php и tpl.innocence.core_error404_tpl.php) /datas/user/{user_id}/ - тут хранятся все файлы пользователя с {user_id} (авка, фотка, картинки в подписи и все что он залил в личный архив или на форум) /datas/html/{name_1}.html - статистическая страница /datas/temp/{temp_name} - временный файл созданный ядром (как правило надо тока при обновлении какого либо компонента или иногда служит индикатором лока) /datas/store/{name_1}.{ext} - файлы которые автоматически обновляются (к примеру база geoIp и browscap.ini) /datas/system/{name_1}.php - файлы что требуется подключить до инициализации системы (пока ет некоторые конфиги) Пока я думаю внести следуйщие изменения: 1 - убрать файлы что лежат в корне папки /system/engine/, создать папку /system/engine/helper и хранить файлы с набором функций, именовать так же как {lang_fname}, подрубать их автоматом, по аналогу с этим сделать папку в плагине. 2 - убрать папку /system/javascript/ и /system/image/, в замену создать /system/хз что/ и там хранить подобную дребедень (в общем все что отдается клиенту) 3 - все что в /system/engine/ выкинуть в /system/ а прошлую диру делитнуть Вопросы на которые хочется получить ответы: 1 - Каждая тема должна содержать дизайн для админ панели, диз админки не часто меняют.. может как то по другому организовать? 2 - Стоит ли максимально ужесточить правила для именования директорий темы и плагина? 3 - Все имена дир и файлов в нижнем регистре кроме тех что system/engine/class стоит ли так делать? (честно скажу так сделал тока ради красоты и сам понимаю Возможные трудности но ведь их не возникнет если следовать правилам =) ) 4 - Можно ли злоупотреблять (ну ет громко сказано, не более 120 вызовов и все к частям системы что не измены) функцией file_exists для автоматизации подключения классов, наборов функций, контроллера, модуля, хуков, ланг файлов, шаблонов (по идее после первого вызова результат функции кешируется, и обращение к файловой системе на второй раз не идет.. я правильно думаю?) 5 - Что по вашему мнению необходимо изменить\удалить\добавить? Чтоб не создавать еще один топик сразу спрошу про utf8: 1 - Какие подводные камни при использовании кодировки utf8? 2 - Какие ограничения\правила в использовании регекспов и строковых функцый с utf8? 3 - Какие стандартные функции могут начать чудить заметив utf8? 4 - Сколько % проблем покроет mbstring.func_overload и выставление нужной локали при учете того что регекспы не используются (это не так, но давайте представим) 5 - mbstring.func_overload > Changeable = PHP_INI_SYSTEM | PHP_INI_PERDIR, PHP_INI_PERDIR значит что я магу менять значение юзая .htaccess? 6 - Какие дополнительные настройки\действия вы можете порекомендовать при переходе на utf8? 7 - Существует ли сумермегакласс который решит львиную часть возможных проблем? 8 - Есть ли в природе список рекомендаций от разработчиков самого интерпритатора или его ядра? Сейчас все крутится на cp1251/PHP5.3.1/Apache2.2/дорога мне в ад но os Windows XP, объем php кода более 17к строк, весь код знаю идеально с utf-8 дела не имел(тока по мелочи), бд набита ненужной тестовой инфой, не каких парсеров пока не использую (исключение компилятор шаблонов, но если я прально понимаю то те регекспы что там не пострадают). Интересует только личный опыт, или актуальная информация из надежного источника. + ктонить может адекватно оценить время которое потребуется на переход учитывая предоставленную информацию? У кого есть полезный и проверенный код которым не жалко поделится приму в дар =). PS: в первую очередь интересуют ответы по теме а на utf-8 решил перейти так как многие сервисы юзают именно это кодировку так же заколебало чудить с аяксом ну и само собой этож *лять теперь модно.. запарился набирать так что сори за ошибки и опечатки, я не олень =))
вместо strlen, strpos, substr (и др.) используй mb_strlen, mb_strpos, mb_substr с явно указанной кодировкой в последнем параметре функции. вот наглядный быдлокод: Code: function my_strlen($str) {return mb_strlen($str, YOUR_ENCODING_IN_CONSTANT);} я бы не стал использовать utf-8 в подобном проекте.