Page 1 of 1

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

Posted: Fri Nov 05, 2010 6:07 pm
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 явно никакого языка кроме английского не знают. А я не настолько знаю
английский чтобы доходчиво им объяснить суть их ошибок. Если кто может - доведите, пожалуйста.

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

Posted: Mon Nov 08, 2010 5:24 pm
by butcher_88
Проблема: В настройках пользователя в списке поля
"Домашняя страница" в слове "Нет" вместо буквы "Н" ромбик.
Вроде такого глюка не замечено....

А вообще до обновления база была cp1251? С этим проблемне было?

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

Posted: Tue Nov 09, 2010 8:46 pm
by Dominikus
Большое человеческое спасибо! 8)

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

Posted: Wed Nov 10, 2010 10:13 am
by LightFighter
Парень, да ты просто крут. Молодца!
:D

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

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

http://forum.cmsmadesimple.org/index.ph ... #msg166224

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

Posted: Sat Nov 13, 2010 10:35 am
by von-hamster
На самом деле достаточно включить переопределение функций на mb_*
Делается одной строчкой mbstring.func_overload - посмотрите в доках параметры.

По поводу остального - в последних версиях многие проблемы исправлены. Но чаще всего помогает просто установка в конфиге правильной локали, особенно, если на сервере по дефолту стоит не utf.
Тоесть строчка $config['locale'] = 'ru_RU.UTF8'; - Как минимум исправляет проблему с русскими названиями месяцев в новостном модуле.

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

Posted: Sun Aug 07, 2011 9:48 am
by ve2
Давненько не заходил сюда. Уже столько новых версий появилось, может в них действительно нет названных мной проблем. Я же тогда и в багтрекер им написал на ломаном английском. Надо попробовать. Хм... Почему-то часть текста предложенных решений старых проблем просто пропала с форума. Загадочное явление. Пришлось восстановить.

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

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

Posted: Sun Aug 07, 2011 6:55 pm
by replytomk3
Если другие подтвергают такие решения, то статью надо перевести для разработчиков, а также написать feature requests на Forge. В противном случае ничего никогда не изменится.