WEB-думы color:pink (Дурацкая одевалка)

топ 100 блогов e_serg — 11.07.2010 Сто лет назад обещал WEB-думы color:pink (Дурацкая одевалка) [info]__xa  сделать сайт для Новой Аналитической Энциклопедии, которая сейчас живет в ЖЖ (WEB-думы color:pink (Дурацкая одевалка) [info]ru_encyclopedia). Казалось бы не очень сложно: установить Joomla, настроить разделы и рубрики (она там всего одна), наладить экспорт контента, настроить Crone и установить модуль и компонент алфавитного указателя… Всякие стили, украшения, шаблоны – можно как-нибудь после сделать… да и модули прошивающие словарные статьи внутренними ссылками тоже. В общем, дел на несколько часов внимательной работы. Но…

Алфавитных модулей и компонентов для Joomla! не много. Точнее один. Вот этот:

ABC -- http://extensions.joomla.org/extensions/news-display/articles-listing/10040

Есть еще и компонент для этого модуля (вообще то по отдельности ни компонент, ни модуль смысла не имеют вообще). Лано, что модуль не показывает русских букв. Но это еще полбеды. Допустим, я хоть PHP не знаю, а сам модуль переписал, так что в нем теперь русские буквы отражаются (и вообще любые, какие задам… у меня был этот модуль еще первой версии и даже восьмикласснику знакомому с программированием разобраться было бы не сложно). Но это проблемы не решает. Дело в том, что сопутствующий компонент, который выводит алфавитные списки, на русских буквах работает некорректно. На любую из них он выводит ВЕСЬ(!) перечень статей с русскоязычными заголовками. В самом компоненте я разобраться уже не могу (во-первых, я опять-таки, не знаю PHP; а во-вторых, компонент вызывает какие-то внутренние Джумловские функции...)

Как порешать проблему? Может есть умельцы?? Задачка то типовая наверняка.

P.S. Да... возможно это важно. У меня кодировка UTF-8 и у Joomla! и у MySQL. Подозреваю, что с CP1561 будет все ок... Но мне нужен именно UTF-8

P.P.S. Есть еoе один аналогичный компонент. AtoZ -- http://extensions.joomla.org/extensions/news-display/articles-listing/11454 ... с ним такая же беда.


UPD несколько часов спустя:

Вообще что-то после всех этих ковыряний в коде пришло полное разочарование в PHP.

Вот смотрите какой был код:

$letters_x_row = 12;
<table cellpadding="3" cellspacing="0" border="0">
<tr><td><?php
$row_letter_count = 0;
//echo 'A:'.ord('A').' Z:'.ord('Z');
for($i = ord('A'); $i <= ord('Z'); $i++) {
$letter = chr($i);
//echo 'Letter:'.$letter;
$link = JRoute::_("index.php?option=com_abc&view=abc&letter=$letter");
?><a href="<?php echo $link; ?>"><?php echo $letter; ?></a><?php
$row_letter_count++;
if($row_letter_count > $letters_x_row) {
?></td></tr><tr><td><?php
$row_letter_count = 0;
} else {
?></td><td><?php
}
}?>
</td></tr>
</table>
Оставим в покое, что модуль генерил неправильный код (неравное число клолнов я сроках таблицы, и несколько пустых табличных строк в конце. Проблема в от в чем. А я сделал вот так:
$letters_x_row = 12;
<table cellpadding="3" cellspacing="3" border="0" width="100%">
<tr><td><?php
$row_letter_count = 1; //echo 'A:'.ord('A').' Z:'.ord('Z'); $mylist = "ABCDEFGHIKLMNOPQRSTVXYZ АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ 1234567890"; for($i = 0; $i < mb_strlen($mylist); $i++) { $letter = mb_substr($mylist, $i, 1, "utf-8"); if ( strcasecmp ( $letter, " " ) == 0 ) { for( ; $row_letter_count < $letters_x_row; ++$row_letter_count) { ?>&nbsp;</td><td><?php } $row_letter_count=1; ?>&nbsp;</td></tr><tr><th colspan="<?php echo $letters_x_row; ?>">&nbsp;</th></tr><td><?php continue; } //echo 'Letter:'.$letter; $uletter = urlencode( $letter ); $link = JRoute::_("index.php?option=com_abc&view=abc&letter=$uletter"); ?><a href='<?php echo $link; ?>'><?php echo $letter; ?></a><?php if(++$row_letter_count > $letters_x_row) { ?></td></tr><tr><td><?php $row_letter_count = 1; } else { ?></td><td><?php } } for($i = $row_letter_count; $i < $letters_x_row; $i++) { ?>&nbsp;</td><td><?php } ?>&nbsp;</td></tr> </table>
Если кто не понял, то дело в том, что функция chr($i) и вообще все строковые функции PHP не поддерживают юникод! Для работы со строками юникода у него есть аналогичные функции с приставкой mb_... Что это я язык программирования, если работая со строками я должен учитывать всякую ерунду вроде кодировки? Т.е. каждый раз запрашивать хидер HTTP, узнавать что там указано и предусмотреть два (а то и больше) варианта кода? Я даже себе представлять не хочу, что должны в таком случае делать программисты для обеспечения переносимости если они делают что-то серьезное ... Всякое желание осваивать PHP пропало вообще. Буду в книдном, поищу книжку по RubyOnRails...

WEB-думы color:pink (Дурацкая одевалка)

Оставить комментарий

Архив записей в блогах:
Милые дамы и барышни, желаю вам не только сегодня, 8 марта, в Международный Женский День счастья, любви и здоровья, а чтобы жизнь вас радовала всегда! Если вы нажмете на эту фотографию, то попадете в путешествие на австралийский остров Кенгуру, где я сфотографировала эти цветы. Если ...
Меня сейчас неправильно поймут, наверное. Это и выглядит на первый взгляд нетолерантно, и к тому же слова опять неприличные. Но я считаю это прекрасным обновлением классического сюжета! КВАРТЕТ Проказница мартышка, Осёл, козёл и косолапый мишка Задумали пойти в гей-клуб. Достали ...
Опубликована моя новая статья. В основе — текст доклада, прочитанный на конференции «Второй Уральский историко-архивный форум» в октябре этого года.  Павленко А.П. Основные принципы изучения истории самосудов и террора в вооруженных силах в период 1917-1918 гг. // ...
Мед исторически часто использовался в нашей кулинарии для приготовления мяса или рыбы. А если еще и с имбирем…  Эта пара создает удивительный карамельный, изысканно-пряный аромат и вкус. И даже простого карася способна превратить в шедевр. ...
Никого не хочу обидеть, честно, но с возрастом всё чаще прихожу к выводу, что лучше дружить с мужчинами. Нет, у меня есть подруги, и давнишние, и у нас хорошие отношения..... [ Spoiler (click to open) ] . Но что-то не так... Как бы объяснить? Думаю, вы и сами догадываетесь, о ...