Тезаурус
Re: Тезаурус
Спасибо, смотрю. Пока не понял как его создать из готовой базы терминов (всего около 3000, вручную вводить долго)Sonya wrote: Есть, тут http://dev.cmsmadesimple.org/projects/glossary
Last edited by Jamaysky on Wed Jul 01, 2009 7:15 pm, edited 1 time in total.
Re: Тезаурус
Базу я в CMSMS импортировал - оказалось довольно просто - таблица cms_module_glossary_termZYV wrote: Написать скрипт...
В ней 3 поля term_id(int) , term(text) и definition(text) практически один в один совпали с моими.
А вот дальше пошло хуже. Несмотря на то, что все в utf-8, в Firefox и Опере лезут всем хорошо известные ромбики �.
А вот в ИЕ, как ни странно - все хорошо.
А темплейты придется редактировать - такого алфавитного указателя, как мне надо (смотри ниже), нет.
А Б В Г Д Е...Я
P.S. Только что переехал на 1.6 - не помогло.
Last edited by Jamaysky on Thu Jul 02, 2009 5:02 pm, edited 1 time in total.
Re: Тезаурус
Ромбики лезут, потому что там с *не* mb_ функциям все сделано, т.е вместо mb_strtolower стоит strtolower и так далее. Я где-то уже выкладывала в англоязычной ветке utf8 версию, но не могу найти (возможно, канадцу опять не понравилось). Прицепляю аттачмент сюда. Сравни с оригиналом.hogofogo wrote: А вот дальше пошло хуже. Несмотря на то, что все в utf-8, в Firefox и Опере лезут всем хорошо известные ромбики
- Attachments
-
[The extension txt has been deactivated and can no longer be displayed.]
Re: Тезаурус
Ромбиков как не бывало! Сам бы кучу времени на это ухлопал... Канадцу - незачет.Sonya wrote: Ромбики лезут, потому что там с *не* mb_ функциям все сделано, т.е вместо mb_strtolower стоит strtolower и так далее. Я где-то уже выкладывала в англоязычной ветке utf8 версию, но не могу найти (возможно, канадцу опять не понравилось). Прицепляю аттачмент сюда. Сравни с оригиналом.

Спасибо большое, буду дальше копать.
Re: Тезаурус
Пока PHP6 не вышла надо это решать перегрузкой функций в php.ini, а не добавлением mb_ ... mb_ скоро вообще не будет.
unsigned double ZYV;
Re: Тезаурус
Да, тут не все просто... Тот патч, что прислала Sonya (еще раз спасибо!), работает, но он к более старой версии модуля - 0.5, и по сути заменяет новый модуль. А сейчас уже версия 0.6.6 и автор многое переделал, добавил полезную функциональность. Пробовал править по образцу и подобию новый модуль-пока не выходит.ZYV wrote: Пока PHP6 не вышла надо это решать перегрузкой функций в php.ini, а не добавлением mb_ ... mb_ скоро вообще не будет.
Поставил в php.ini
mbstring.func_overload = 7 (или 2) - еще хуже, одни ромбики.
P.S. Разобрался. У функции ucfirst(), используемой в модуле, по перегрузке просто нет mb_ версии.
Ее надо либо написать (уже есть в коде у Sonya), либо (в моем случае - мне больше понравилось когда всё в нижнем регистре), просто удалить и включить перегрузку
mbstring.func_overload = 2
P.P.S вот еще версия mb_ucfirst от друпалеров, для разнообразия.
Last edited by Jamaysky on Fri Jul 03, 2009 8:56 am, edited 1 time in total.
Re: Тезаурус
Поставил сегодня 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: */
?>
Только в админке внес небольшие поправки (опять ромбики, чтоб их!) из-за однобайтовой 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: */
?>