Надо сказать, что по причине отутствия времени и особой необходимости
не обновлял я 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 явно никакого языка кроме английского не знают. А я не настолько знаю
английский чтобы доходчиво им объяснить суть их ошибок. Если кто может - доведите, пожалуйста.
Как я обновлялcя до 1.8.2 или решения проблем
Как я обновлялcя до 1.8.2 или решения проблем
Last edited by ve2 on Sun Aug 07, 2011 9:49 am, edited 3 times in total.
-
- Forum Members
- Posts: 113
- Joined: Tue Jun 22, 2010 11:05 am
Re: Как я обновлялcя до 1.8.2 или решения проблем
Вроде такого глюка не замечено....Проблема: В настройках пользователя в списке поля
"Домашняя страница" в слове "Нет" вместо буквы "Н" ромбик.
А вообще до обновления база была cp1251? С этим проблемне было?
Re: Как я обновлялcя до 1.8.2 или решения проблем
Большое человеческое спасибо! 

Re: Как я обновлялcя до 1.8.2 или решения проблем
Парень, да ты просто крут. Молодца!


Re: Как я обновлялcя до 1.8.2 или решения проблем
Не доходят у них руки, похоже. Я уже с подобными проблемами разбирался в прошлом году:ve2 wrote: PS. Почему это всё нельзя сделать в релизе мне не понятно. Заявить работу в UTF-8 недостаточно. Надо еще уметь с ней работать. Разработчики использующие substr на
данных в UTF8 явно никакого языка кроме английского не знают. А я не настолько знаю
английский чтобы доходчиво им объяснить суть их ошибок. Если кто может - доведите, пожалуйста.
http://forum.cmsmadesimple.org/index.ph ... #msg166224
-
- Power Poster
- Posts: 339
- Joined: Thu Nov 01, 2007 3:11 pm
Re: Как я обновлялcя до 1.8.2 или решения проблем
На самом деле достаточно включить переопределение функций на mb_*
Делается одной строчкой mbstring.func_overload - посмотрите в доках параметры.
По поводу остального - в последних версиях многие проблемы исправлены. Но чаще всего помогает просто установка в конфиге правильной локали, особенно, если на сервере по дефолту стоит не utf.
Тоесть строчка $config['locale'] = 'ru_RU.UTF8'; - Как минимум исправляет проблему с русскими названиями месяцев в новостном модуле.
Делается одной строчкой mbstring.func_overload - посмотрите в доках параметры.
По поводу остального - в последних версиях многие проблемы исправлены. Но чаще всего помогает просто установка в конфиге правильной локали, особенно, если на сервере по дефолту стоит не utf.
Тоесть строчка $config['locale'] = 'ru_RU.UTF8'; - Как минимум исправляет проблему с русскими названиями месяцев в новостном модуле.
Re: Как я обновлялcя до 1.8.2 или решения проблем
Давненько не заходил сюда. Уже столько новых версий появилось, может в них действительно нет названных мной проблем. Я же тогда и в багтрекер им написал на ломаном английском. Надо попробовать. Хм... Почему-то часть текста предложенных решений старых проблем просто пропала с форума. Загадочное явление. Пришлось восстановить.
По поводу:
По поводу:
Вы почти правы. Если на сервере больше ничего кроме cmsms нет, то перегрузка строковых функций может решить часть проблем. Но если есть что-то написанное правильно, где длина строки в байтах и в символах должны отличаться, то перегрузка угробит работу таких приложений. Не зря же эта возможность в php опциональна и выключена по-умолчанию.von-hamster wrote:На самом деле достаточно включить переопределение функций на mb_*
Re: Как я обновлялcя до 1.8.2 или решения проблем
Если другие подтвергают такие решения, то статью надо перевести для разработчиков, а также написать feature requests на Forge. В противном случае ничего никогда не изменится.