Как я обновлялcя до 1.8.2 или решения проблем

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

Moderators: iturbay, wdwp

Post Reply
ve2
Forum Members
Forum Members
Posts: 11
Joined: Wed Feb 20, 2008 8:55 am

Как я обновлялcя до 1.8.2 или решения проблем

Post by ve2 »

Надо сказать, что по причине отутствия времени и особой необходимости
не обновлял я cmsms аж с версии 1.2.3, то есть давненько. Помню и тогда были
танцы с бубнами. Но это же когда было подумал я, и понадеялся что теперь всё пройдет гладко. Не тут то было.

Опущу подробности попыток поставить новую версию поверх, как положено с обновлением.
Обновление прошло, но вылезло столько проблем, что пришлось забекапить
из обновленной базы таблицы с контентом, новостями и связанными данными, поставить
1.8.2 на пустую базу и потом забекапленные таблицы загрузить. Шаблоны, стили, теги, меню пришлось переносить вручную. Одна радость - этого добра было не так много, получилось быстро.  Это была лирика. А теперь мои записи по делу. Часть проблем уже была в форуме, но относительно других версий и в разных местах. Всё вместе:

--------------------

CMS Made Simple 1.8.2 "Toliara"

Проблема: В редакторе контента в меню ссылок на собственные
страницы CMS в обрезанных русских строках выводятся ромбики.

Причина: Юникодные двухбайтные русские символы обрезаются до одного байта.
И вообще разработчики не умеют работать с нелатиницей.

Решение: В TinyMCE.module.php заменить strlen и substr на mb_strlen и mb_substr
в функциях AddEntry и AddSub (можно искать по …).
PHP модуль mbstring должен быть установлен.
В config.php первой строкой добавить

mb_internal_encoding('UTF-8');

Вероятно, следует заменить и другие substr и strlen в файлах
CMS на mb_ аналоги, но делать это бездумно опасно, поскольку
размер данных в байтах и длина строки в символах не одно и то же .

* * *

Проблема: В редакторе контента в меню ссылок на собственные
страницы CMS русские названия страниц вставляются кракозябрами.

Причина: Разработчики считают все нелатинские символы не буквами.

Решение: В TinyMCE.module.php в функции AddEntry заменить
htmlentities($entry->MenuText(), ENT_QUOTES)
на
htmlspecialchars($entry->MenuText(), ENT_QUOTES)

* * *

Проблема: В редакторе контента в меню ссылок на собственные
страницы CMS ссылки не вставляются если у целевой страницы нет алиаса.

Причина: Необъяснимо

Решение: В TinyMCE.module.php в функции AddEntry заменить
$link = "index.php?" . $config['query_var'] . "=" . $entry->Alias();
на что-то вроде этого:
$link = "index.php?" . $config['query_var'] . "=" . (trim($entry->Alias()) == '' ? $entry->Id() : $entry->Alias());

* * *

Проблема: В настройках пользователя в списке поля
"Домашняя страница" в слове "Нет" вместо буквы "Н" ромбик.

Решение: В lib/classes/class.admintheme.inc.php в функции
GetAdminPageDropdown заменить
$opts[ucfirst(lang('none'))] = '';
на
$opts[mb_ucfirst(lang('none'))] = '';
Поскольку mb_ucfirst не существует, например в начало config.php добавить

function mb_ucfirst($s)
{
return mb_strtoupper(mb_substr($s, 0, 1)) . mb_substr($s, 1);
}

Вероятно, правильно будет заменить во всех файлах CMS вхождение ucfirst на mb_ucfirst

* * *

Проблема: Слишком узкая колонка с названиями страниц (ну для меня это проблема).

Решение: В admin/themes/default/css/style.css закомментировать в стиле th.pagew25
значение ширины. Обозреватель лучше подберет ширину чем заранее установленная четверть экрана.

* * *

Проблема: Слишком мальенькие поля "Заголовок", "Текст мею", "Алиас страницы"

Решение: В lib/class/class.content.inc.php добавить size="80" в
<input type="text" name="title"
<input type="text" name="menutext"
<input type="text" name="alias"

----------------

Пока всё, что нашел.
Спасибо за выходные.


PS. Почему это всё нельзя сделать в релизе мне не понятно. Заявить работу в UTF-8 недостаточно. Надо еще уметь с ней работать. Разработчики использующие substr на
данных в UTF8 явно никакого языка кроме английского не знают. А я не настолько знаю
английский чтобы доходчиво им объяснить суть их ошибок. Если кто может - доведите, пожалуйста.
Last edited by ve2 on Sun Aug 07, 2011 9:49 am, edited 3 times in total.
butcher_88
Forum Members
Forum Members
Posts: 113
Joined: Tue Jun 22, 2010 11:05 am

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by butcher_88 »

Проблема: В настройках пользователя в списке поля
"Домашняя страница" в слове "Нет" вместо буквы "Н" ромбик.
Вроде такого глюка не замечено....

А вообще до обновления база была cp1251? С этим проблемне было?
User avatar
Dominikus
Forum Members
Forum Members
Posts: 31
Joined: Mon Oct 05, 2009 12:33 pm

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by Dominikus »

Большое человеческое спасибо! 8)
LightFighter

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by LightFighter »

Парень, да ты просто крут. Молодца!
:D
User avatar
Jamaysky
Forum Members
Forum Members
Posts: 23
Joined: Thu Mar 27, 2008 7:35 pm

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by Jamaysky »

ve2 wrote: PS. Почему это всё нельзя сделать в релизе мне не понятно. Заявить работу в UTF-8 недостаточно. Надо еще уметь с ней работать. Разработчики использующие substr на
данных в UTF8 явно никакого языка кроме английского не знают. А я не настолько знаю
английский чтобы доходчиво им объяснить суть их ошибок. Если кто может - доведите, пожалуйста.
Не доходят у них руки, похоже. Я уже с подобными проблемами разбирался в прошлом году:

http://forum.cmsmadesimple.org/index.ph ... #msg166224
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by von-hamster »

На самом деле достаточно включить переопределение функций на mb_*
Делается одной строчкой mbstring.func_overload - посмотрите в доках параметры.

По поводу остального - в последних версиях многие проблемы исправлены. Но чаще всего помогает просто установка в конфиге правильной локали, особенно, если на сервере по дефолту стоит не utf.
Тоесть строчка $config['locale'] = 'ru_RU.UTF8'; - Как минимум исправляет проблему с русскими названиями месяцев в новостном модуле.
ve2
Forum Members
Forum Members
Posts: 11
Joined: Wed Feb 20, 2008 8:55 am

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by ve2 »

Давненько не заходил сюда. Уже столько новых версий появилось, может в них действительно нет названных мной проблем. Я же тогда и в багтрекер им написал на ломаном английском. Надо попробовать. Хм... Почему-то часть текста предложенных решений старых проблем просто пропала с форума. Загадочное явление. Пришлось восстановить.

По поводу:
von-hamster wrote:На самом деле достаточно включить переопределение функций на mb_*
Вы почти правы. Если на сервере больше ничего кроме cmsms нет, то перегрузка строковых функций может решить часть проблем. Но если есть что-то написанное правильно, где длина строки в байтах и в символах должны отличаться, то перегрузка угробит работу таких приложений. Не зря же эта возможность в php опциональна и выключена по-умолчанию.
replytomk3

Re: Как я обновлялcя до 1.8.2 или решения проблем

Post by replytomk3 »

Если другие подтвергают такие решения, то статью надо перевести для разработчиков, а также написать feature requests на Forge. В противном случае ничего никогда не изменится.
Post Reply

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