Небольшие стартовые фиксы

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Небольшие стартовые фиксы

Post by von-hamster »

Далее следуют несколько фиксов, которые я применяю к cms, чтобы она корректно работала с русским языком.
Возможно большинству они известны, но в свое время я местами долго искал и ломал голову  :)

Итак:

0. (именно 0, а не 1  :) ) Это скорее не фикс, а настройки: первое, что я делаю, так это меняю кодировку базы на utf8, если она не по умолчанию.

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);
    }
3. Проблема: при добавлении нового контента, если ручками не вбить "Page Alias" - страница не добавляется (по другому - автоматом не генерится этот альяс)
    Файл: 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',
...
    Замечание: необходимо учитывать кодировку, тоесть файл должен быть сохранен в той кодировке, в которой используется на сайте... По умолчанию - utf-8

Продолжение.............................................

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;
		}
Естессно это работает только с фиксами: http://forum.cmsmadesimple.org/index.ph ... #msg125650

И еще, чуть не забыл: текущий вариант function.hierarchy.php - кэширует свой результат в файл, чтобы при обновлении контента очистить кэш нужно следующее:
Добавить пользовательский тег следующего содержания:

Code: Select all

@unlink(TMP_CACHE_LOCATION . '/main_hierarchy.php');
И привязать его к событиям: ContentDeletePost и ContentEditPost.
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

Last edited by von-hamster on Fri Nov 14, 2008 7:11 am, edited 1 time in total.
ilia3d

Re: Небольшие стартовые фиксы для русского яk

Post by ilia3d »

По пункту 1. надо попробовать, очень интересно )
User avatar
Il_Burbero
Forum Members
Forum Members
Posts: 128
Joined: Tue Apr 15, 2008 10:36 am

Re: Небольшие стартовые фиксы для русского яk

Post by Il_Burbero »

Пункт второй и третий нужно включить в дистрибутив!

Я тупая офца снимаю шляпу пред столь элегантным решением проблемы с алиасами. Самое главное что это намного меньшая кровь чем втыкание дополнительных транслитераторов. А я то глупенький ковырял munge_string добавлял сторонние файлы, когда все решается намного проще!
Фон Хомячок вы гений!
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Небольшие стартовые фиксы для русского яk

Post by von-hamster »

Я создал эти темы в багтрекере, правда на кривом английском, но думаю, что поймут...

ЗЫ... Небольшое замечание к посту: в 3 пункте необходимо учитывать кодировку... Т.к. я делаю сайт на utf8 - у меня там все в utf8, как это будет работать с остальным - понятия не имею...
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Небольшие стартовые фиксы

Post by von-hamster »

2 и 3 пункт в svn вроде пофиксили... Думаю, что в следующем релизе уже будет...
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Небольшие стартовые фиксы

Post by ZYV »

Ну ты чувак, ну ты крут. Ты сделал то, что давно нужно было всем и все хотели, но никто не делал. Видимо в 1.5 настанет всем нам счастье. Спасибо.
unsigned double ZYV;
A_Saf

Re: Небольшие стартовые фиксы

Post by A_Saf »

Уважаемый, von-hamster! Вы — просто молодец! Я новичок в этом деле и проблемы с Алиасами меня еще не коснулсиь (только присматриваюсь к CMS MS), но вот решение проблем с utf-8 мне очень помогло, только пришлось дописать еще пару строчек, вот что получилось:

Code: Select all

 $cmsdb->Execute("set names 'utf8' set collate 'utf8_general_ci'"); // database connection with utf-8
    $cmsdb->Execute("SET CHARACTER SET 'utf8'") ;
    $cmsdb->Execute("SET SESSION collation_connection = 'utf8_general_ci'");
Без них у меня не заработало, а с ними все ОК!

Жаль, что я раньше не нашел эту ветку — вчера пол вечера искал в коде, куда бы дописать кодировку и коллэйт!

Есть еще предложение — сделать профиксинный дистрибутив "для русских" :) Чтоб не мучились больше люди!

Еще раз спасибо!

Кстати, решение также было найдено на форуме, но уже другой СМS. Автор решения Fuzzy aka Igor ©
A_Saf

Re: Небольшие стартовые фиксы

Post by A_Saf »

Да, еще надо бы на стадии установки системы прописывать кодировку по дефолту для каждой таблицы, тогда ИМХО будет работать на любом хостинге....
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Небольшие стартовые фиксы

Post by von-hamster »

A_Saf wrote: Есть еще предложение — сделать профиксинный дистрибутив "для русских" :) Чтоб не мучились больше люди!
Часть изменений будет в новой версии, как я писал (если не терпится - бери последнюю версию из svn - я так и делаю)...

По поводу же кодировок - как я понял - создатели хотят ее заточить под большое количество (в частности, п2 они сделали немного по другому, тк этот не работает с другими кодировками)...

На самом деле - я не понимаю, зачем они это делают - заточили бы только под utf-8... Ведь, например, для русской версии, чтобы поменять на 1251 - нужно не только поправить соединения с БД, а еще добавить/изменить текущие файлы перевода (это как минимум на первый взгляд)...
Да, еще надо бы на стадии установки системы прописывать кодировку по дефолту для каждой таблицы, тогда ИМХО будет работать на любом хостинге...
Не обязательно - достаточно перед установкой поменять дефолтную кодировку БД, если, конечно, позволяет хостинг...

ЗЫ... Есть еще один интересный момент... Для иерархии они зарезервировали 5 разрядов, тоесть для каждого уровня может быть 99999 страниц, что, по моему, слишком, даже для больших сайтов, к тому-же, с их ядром - он убъет всю память...
A_Saf

Re: Небольшие стартовые фиксы

Post by A_Saf »

Не обязательно - достаточно перед установкой поменять дефолтную кодировку БД, если, конечно, позволяет хостинг...
Это, собственно, я и имел в виду. Наверное, больше по незнаю (может, большинство хостингов позволяют проводить подобные манипуляции).
Кстати, сейчас посидел немного, вроде нашел куда можно впихнуть кодировки создаваемых таблиц.
По поводу отображения русских заглавных букв в админке, заметил косяк только с буквой "Р" и то только в тех местах, где она внеслась во время установки. В других, например, в названиях страниц, все тип-топ!
Опять же связываю это с невыставленными переменными кодировок в момент занесения в БД установочной информации.
Ваш способ, пока не применял, но попробую обязательно...
Я, если честно, не следил за хронологией развития CMS (новенький я), но надеюсь, что в версии 1.5 будет в полной мере отлажена мультикодировочность.

Для справки: вот список букв, с которыми были проблемы А Р с Н  э я!
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Небольшие стартовые фиксы

Post by von-hamster »

По поводу отображения русских заглавных букв в админке, заметил косяк только с буквой "Р" и то только в тех местах, где она внеслась во время установки. В других, например, в названиях страниц, все тип-топ!
Опять же связываю это с невыставленными переменными кодировок в момент занесения в БД установочной информации.
Ваш способ, пока не применял, но попробую обязательно...
Это исправляется п.2. Связано не с кодировкой БД, а с функцией preg_replace, которая не всегда корректно ведет себя с utf-8 на стыке с пробелами... Подробнее это есть на http://ru2.php.net/manual/ru/function.preg-replace.php в комментариях.
A_Saf

Re: Небольшие стартовые фиксы

Post by A_Saf »

Спасибо! Ознакомился.

П. С. Жалею, что когда-то упустил тему регулярных выражений, теперь вот наверстываю.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Небольшие стартовые фиксы

Post by von-hamster »

Добавил еще один фикс, см. первый пост...
Last edited by von-hamster on Fri Nov 14, 2008 7:25 am, edited 1 time in total.
Post Reply

Return to “Russian - русский”