Возможно большинству они известны, но в свое время я местами долго искал и ломал голову

Итак:
0. (именно 0, а не 1

1. Проблема: когда смотрю базу тем-же phpmyadmin, вместо русских букв - что угодно, кроме того, что нужно
Файл include.php:
раскомментирую строку:
// $cmsdb->Execute('set names utf8'); // database connection with utf-8
иногда меняю на
$cmsdb->Execute("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); // database connection with utf-8
2. Проблема: вместо первых букв некоторых пунктов меню административного раздела отображается "?" или загогулина
Файл lib/classes/class.admintheme.inc.php
Code: Select all
function FixSpaces($str)
{
return preg_replace('/\s+/'," ",$str);
}
Code: Select all
function FixSpaces($str)
{
return preg_replace('/\s+/u'," ",$str);
}
Файл: lib/replacement.php
В первый массив добавил:
Code: Select all
$toreplace = array(
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я',
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я',
...
Code: Select all
$replacement = array(
'a', 'b', 'v', 'g', 'd', 'e', 'e', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'ts', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya',
'a', 'b', 'v', 'g', 'd', 'e', 'e', 'zh', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'ts', 'ch', 'sh', 'sch', '', 'y', '', 'e', 'yu', 'ya',
...
Продолжение.............................................
4. Проблема: на некоторых хостингах неверно формировалась карта сайта... Особенно, если уровень вложенности страниц достаточно большой...
Файл include.php:
после $cmsdb->Execute('set names... добавить
$cmsdb->Execute('SET max_sort_length = 1024');
Пояснение: иерархия строится после сортировки по полю hierarchy в таблице _content, а значение max_sort_length в бд по умолчанию было очень маленьким, соответственно в сортировке учитывались только первые символы...
Продолжение от 14.11.2008
5. Еще немного про оптимизацию:
Проблема: Начал смотреть страницы с простым контентом, и заметил следующее: каждый вызов {cms_selflink page="alias"} - это запрос в БД. Для одного - двух - это не проблема, а для 2-3 десятков - засада...
Как я исправил:
- Использую модифицированный свой файл function.hierarchy.php (прилагаю)
- сделал замену в файле /plugins/function.cms_selflink.php :
Code: Select all
// Нашел этот код и закоментировал:
/*
# check if the page exists in the db
$manager =& $gCms->GetHierarchyManager();
$node =& $manager->sureGetNodeByAlias($page);
if (!isset($node)) return;
$content =& $node->GetContent();
if ($content !== FALSE)
{
$pageid = $content->Id();
$alias = $content->Alias();
$name = $content->Name(); //mbv - 21-06-2005
$url = $content->GetUrl();
$menu_text = $content->MenuText();
$titleattr = $content->TitleAttribute();
}
*/
// вместо него это:
require_once(dirname(__FILE__) . '/../modules/FB_functions/function.hierarchy.php');
init_main_hierarchy();
//print_r($gCms->RZ_main_hierarchy);
if (isset($gCms->RZ_main_hierarchy_a[$page]) && $gCms->RZ_main_hierarchy_a[$page] > 0)
{
$pageid = $gCms->RZ_main_hierarchy_a[$page];
$alias = $gCms->RZ_main_hierarchy[$pageid]['alias'];
$name = $gCms->RZ_main_hierarchy[$pageid]['header'];
$url = $gCms->RZ_main_hierarchy[$pageid]['url'];
$menu_text = $gCms->RZ_main_hierarchy[$pageid]['text'];
$titleattr = $gCms->RZ_main_hierarchy[$pageid]['title'];
} else {
return;
}
И еще, чуть не забыл: текущий вариант function.hierarchy.php - кэширует свой результат в файл, чтобы при обновлении контента очистить кэш нужно следующее:
Добавить пользовательский тег следующего содержания:
Code: Select all
@unlink(TMP_CACHE_LOCATION . '/main_hierarchy.php');