Проблема сокращения русских букв в MarketPlace

кракозябры в MarketPlace

Компонент MarketPlace 1.4.6 стал в последнее время настолько популярен, что многие сайты используют его, но до ума доводить никто не старается, что собственно наносит свой отпечаток на качество отображения Русскоязычных объявлений.  Очень много сайтов я наблюдал в сети, на которых встречаются своего рода проблемы с сокращением самим компонентом наименования объявления или его содержания, в результате чего в месте сокращения появляется загадочная кракозябра. Все грешат на хостинг провайдеров, мол мучайте службу поддержки, а нужно всего то навсего нужно заглянуть в дебри и исправить одну функцию, чтобы полностью наладить  сокращение русскоязычных объявлений MarketPlace.

 

Для тех, кто возможно не представляет что собственно я хочу исправлять, то возможно вам напомнить вот такой вот скриншот, думаю с этим сталкивались многие и многие еще не решили данную проблему, либо вовсе забили:

Для начала давайте разберемся с модулем Последние 5 фотообъявлений. Как мы видим, наша загадочная кракозябра имеет место быть в месте где сокращается наименование объявление и за ней следует три точки ... Сначала я грешил на то, что какой-то элемент кода или базы данных сохранен не в той кодировке, но просмотрев и протестировав все ручками понял что с этим все нормально. Затем я пробовал изменять количество символов, которые система отображает, а потом сокращает слово. Например вместо 27 символов ставил 28, крякозабры сразу пропадали при сокращении одних, но появлялись в других, таким образом от перемены мест ничего не изменялось.

В общем, решение данной проблемы было найдено путем подмены стандартного оператора языка php на внутриджумловский, что повлияло на корректное отображения данных.

Исправляем отображение 5 последних объявлений с фото:

1. Открываем файл /components/com_marketplace/recent5.php. Доходим до 155 строки и видим следующий html код:

echo "category&adid=$mes->id&Itemid=$Itemid").">";
if ( strlen($mes->ad_headline)>30){
echo substr( $mes->ad_headline, 0, 27)."...";
}
else {
echo $mes->ad_headline;
}
echo "
";

Даже мне, человеку не искушенному в php ясно, что данная функция сокращает наименование объявления в случае если оно более 30 символов до 27 и ставит ... в конце.

Тут в коде появится нашей проблеме ну просто негде, поэтому я предположил что вся проблема заключается в некорректной обработке substr русских символов, мол ну не родные они для меня, вот и появляется всяках фигня на конце.

Для того чтобы все отображалось как надо, нужно будет подправить 157 строку и привести ее к виду JString::substr

echo "category&adid=$mes->id&Itemid=$Itemid").">";
if ( strlen($mes->ad_headline)>30){
echo JString::substr( $mes->ad_headline, 0, 29)."...";
}
else {
echo $mes->ad_headline;
}
echo "
";

JString - это своего рода джумловская обработка строк, которая не знает проблем с UTF-8. Таким образом все у меня стало на свои места в модуле отображения последних 5 объявлений с фото.

Для исправления отображения левых символов в содержании объявления, нужно аналогично подправить файл show_category, я например сделал так (703 строка если редактировать через Notepad ++), если у вас еще нет Notepad ++ то обязательно скачайте {phocadownload view=file|id=15|target=b}

Находим следующий код в районе 707 строки

$af_text = htmlspecialchars (substr($row->ad_text, 0, 100)."...");

И редактируем его так:

$af_text = htmlspecialchars (JString::substr($row->ad_text, 0, 100)."...");

т.е. $af_text = htmlspecialchars (JString::substr($row->ad_text, 0, 100)."..."); как раз и приводит к тому что при сокращении объявления не появляется вот такого пустого квадратика

Для исправления отображения левых символов в списке результатов поиска нужно ручками аналогично подправить файл list.php в районе 507 строки:

$af_text = htmlspecialchars (substr($row->ad_text, 0, 100)."...");

меняем на:

$af_text = htmlspecialchars (JString::substr($row->ad_text, 0, 100)."...");

После того как я все это проделал, все стало отображаться без каких либо проблем. Если у вас возникли затруднения, то вы всегда можете извлечь нужные вам файлы из моей сборки MarketPlace 1.4.6 Русский пак

 

Таким образом, я свою доску объявлений к корректному отображению привел, чего и вам желаю.

  Понравилась статья ? Подпишись на RSS и будь всегда в курсе новых! Все обновления публикуются в Twitter! Следуйте за мной и будите всегда в курсе происходящего!
Баннер

Комментарии 

 
#29 Ягнёнок 01.04.2011 17:15
Обновил русский пак для MarketPlace - подробности тут yagnenok.com/marketplace-1.4.6-s-patchem-dlya-ustanovki-samostoyatelnogo-sroka-zhizni-kazhdogo-ob-yavleniya.html
 
 
#28 Сергей Павлович 25.02.2011 16:07
Цитирую seg@:
Э какой лентяй, надо и самому ручками потрудиться, чтобы был результат)))

Лентяй, конечно, зачем делать то, что уже существует.
Но уже всё сделал...
 
 
#27 Сергей Павлович 25.02.2011 16:05
Может, пост не в тему, но я подписался на получение уведомлений о комментариях, а уведомления не приходят.
 
 
#26 seg@ 23.02.2011 12:51
Цитирую Сергей Павлович:
Скачал у Вас MarketPlace, всё работает, но категории отсутствуют, только тестовые, можно конечно и вручную добавить, но если бы Вы выложили с категориями, был бы очень признателен.

Э какой лентяй, надо и самому ручками потрудиться, чтобы был результат)))
 
 
#25 Ягнёнок 22.02.2011 14:43
Цитирую Сергей Павлович:
Скачал у Вас MarketPlace, всё работает, но категории отсутствуют, только тестовые, можно конечно и вручную добавить, но если бы Вы выложили с категориями, был бы очень признателен.

категории каждый добавляет сам на вкус и цвет)))
 
 
#24 Сергей Павлович 22.02.2011 14:18
Скачал у Вас MarketPlace, всё работает, но категории отсутствуют, только тестовые, можно конечно и вручную добавить, но если бы Вы выложили с категориями, был бы очень признателен.
 
 
#23 Seg@ 16.11.2010 22:48
Цитирую Seg@:
Да, но в доске neftweb.ru, которую Вы приводите в пример, этой проблемы нет! Я полазил там и посмотрел при добовление " слэш не выскакивает. Так может дело еще в чем, то????

htmlspecialchars я так понимаю дело все в этом
 
 
#22 Seg@ 16.11.2010 20:19
Да, но в доске neftweb.ru, которую Вы приводите в пример, этой проблемы нет! Я полазил там и посмотрел при добовление " слэш не выскакивает. Так может дело еще в чем, то????
 
 
#21 Ягнёнок 16.11.2010 05:03
Цитирую Seg@:
когда пользователь пишет объявление и ставит знак " , то после сохранения перед этим символом автоматом ставится \" - не подскажете где убрать эту проблему???? Заранее спасибо!!!
это не проблема, а защита компонента. Отсутствие слэша приводило бы к некорректному завершению обработки текста языком php.
 
 
#20 Seg@ 16.11.2010 01:36
Ваш блог - это настоящий клад!!!:))) Все решения сделаны безупречно!!! Большое Вам спасибо!!! Но в маркете есть еще одна проблемка - когда пользователь пишет объявление и ставит знак " , то после сохранения перед этим символом автоматом ставится \" - не подскажете где убрать эту проблему???? Заранее спасибо!!!
 

Добавить комментарий


Защитный код
Обновить

Авторизация

Опрос

Что мне сделать с Gold ключами для DepositFile?
 

Сейчас онлайн

  • Google
  • Robot
  • Yandex
  • [Bot]

Архив по годам