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