Page 1 of 1
Тезаурус
Posted: Wed Jul 01, 2009 6:22 pm
by Jamaysky
Подскажите, есть ли в CMSMS модуль, чтобы сделать алфавитный указатель для словаря типа вот такого:
http://www.slovarik.kiev.ua/ojegov/a.html
Re: Тезаурус
Posted: Wed Jul 01, 2009 6:45 pm
by Sonya
Re: Тезаурус
Posted: Wed Jul 01, 2009 7:07 pm
by Jamaysky
Спасибо, смотрю. Пока не понял как его создать из готовой базы терминов (всего около 3000, вручную вводить долго)
Re: Тезаурус
Posted: Thu Jul 02, 2009 8:29 am
by ZYV
Написать скрипт...
Re: Тезаурус
Posted: Thu Jul 02, 2009 3:42 pm
by Jamaysky
ZYV wrote:
Написать скрипт...
Базу я в CMSMS импортировал - оказалось довольно просто - таблица cms_module_glossary_term
В ней 3 поля term_id(int) , term(text) и definition(text) практически один в один совпали с моими.
А вот дальше пошло хуже. Несмотря на то, что все в utf-8, в Firefox и Опере лезут всем хорошо известные ромбики �.
А вот в ИЕ, как ни странно - все хорошо.
А темплейты придется редактировать - такого алфавитного указателя, как мне надо (смотри ниже), нет.
А Б В Г Д Е...Я
P.S. Только что переехал на 1.6 - не помогло.
Re: Тезаурус
Posted: Thu Jul 02, 2009 6:13 pm
by Sonya
hogofogo wrote:
А вот дальше пошло хуже. Несмотря на то, что все в utf-8, в Firefox и Опере лезут всем хорошо известные ромбики
Ромбики лезут, потому что там с *не* mb_ функциям все сделано, т.е вместо mb_strtolower стоит strtolower и так далее. Я где-то уже выкладывала в англоязычной ветке utf8 версию, но не могу найти (возможно, канадцу опять не понравилось). Прицепляю аттачмент сюда. Сравни с оригиналом.
Re: Тезаурус
Posted: Thu Jul 02, 2009 6:36 pm
by Jamaysky
Sonya wrote:
Ромбики лезут, потому что там с *не* mb_ функциям все сделано, т.е вместо mb_strtolower стоит strtolower и так далее. Я где-то уже выкладывала в англоязычной ветке utf8 версию, но не могу найти (возможно, канадцу опять не понравилось). Прицепляю аттачмент сюда. Сравни с оригиналом.
Ромбиков как не бывало! Сам бы кучу времени на это ухлопал... Канадцу - незачет.

Спасибо большое, буду дальше копать.
Re: Тезаурус
Posted: Thu Jul 02, 2009 7:02 pm
by ZYV
Пока PHP6 не вышла надо это решать перегрузкой функций в php.ini, а не добавлением mb_ ... mb_ скоро вообще не будет.
Re: Тезаурус
Posted: Fri Jul 03, 2009 8:09 am
by Jamaysky
ZYV wrote:
Пока PHP6 не вышла надо это решать перегрузкой функций в php.ini, а не добавлением mb_ ... mb_ скоро вообще не будет.
Да, тут не все просто... Тот патч, что прислала Sonya (еще раз спасибо!), работает, но он к более старой версии модуля - 0.5, и по сути заменяет новый модуль. А сейчас уже версия 0.6.6 и автор многое переделал, добавил полезную функциональность. Пробовал править по образцу и подобию новый модуль-пока не выходит.
Поставил в php.ini
mbstring.func_overload = 7 (или 2) - еще хуже, одни ромбики.
P.S. Разобрался. У функции ucfirst(), используемой в модуле, по перегрузке просто нет mb_ версии.
Ее надо либо написать (уже есть в коде у Sonya), либо (в моем случае - мне больше понравилось когда всё в нижнем регистре), просто удалить и включить перегрузку
mbstring.func_overload = 2
P.P.S вот еще версия mb_ucfirst от друпалеров, для разнообразия.
Re: Тезаурус
Posted: Tue Jul 21, 2009 4:29 pm
by Jamaysky
Поставил сегодня Glossary 0.6.8, уже почти все как надо (Sonya - good job!)
Только в админке внес небольшие поправки (опять ромбики, чтоб их!) из-за однобайтовой truncate
В
listterms.tpl заменил 21-ю и 23-ю строчки:
21
namelink}">{$entry->name|mb_truncate:40:"...":'UTF-8'}
23
{$entry->definition|mb_truncate:80:"...":'UTF-8'}
В /lib/smarty/plugins положил вот такой
modifier.mb_truncate.php
* Name: mb_truncate
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
* This version also supports multibyte strings.
* @link http://smarty.php.net/manual/en/languag ... uncate.php
* truncate (Smarty online manual)
* @author Guy Rutenberg based on the original
* truncate by Monte Ohrt
* @param string
* @param integer
* @param string
* @param string
* @param boolean
* @param boolean
* @return string
*/
function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $charset='UTF-8',
$break_words = false, $middle = false)
{
if ($length == 0)
return '';
if (strlen($string) > $length) {
$length -= min($length, strlen($etc));
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1, $charset));
}
if(!$middle) {
return mb_substr($string, 0, $length, $charset) . $etc;
} else {
return mb_substr($string, 0, $length/2, $charset) . $etc . mb_substr($string, -$length/2, $charset);
}
} else {
return $string;
}
}
/* vim: set expandtab: */
?>