Новости Joomla

Вышли релизы Joomla 6.1 и Joomla 5.4.5: новые возможности и стабильность

Релиз Joomla 6.1.0

Проект Joomla! объявил о доступности Joomla 6.1 [Nyota] — новой минорной версии шестой серии, а также о выпуске релиза исправлений ошибок Joomla 5.4.5. Релиз 6.1 приносит ряд долгожданных функций, повышающих удобство управления контентом и защиту от спама.

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 1677 Просмотров
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Ну точнее проблема не в них, а непосредственно в поиска по полям типа multicheckbox и multiselect.

Короче есть у меня такие поля в объявлениях. При наполнении объявления они имеют тип checkbox, а для поиска выводятся в виде выпадающего списка.

Так вот проблема в том что они в той части компонента, которая отвечает за поиск объявлений, обрабатываются как-то неправильно.

Подробнее:
поле имеет значение rus, en, ua
пытаюсь искать по значению rus
включил отладку в Joomla и в запросе вижу вот такую вот картину:

Код
SELECT adext.*, a.*, p.name as parent, p.id as parentid, c.name as cat, c.id as catid,u.username as user,u.name as fullname  
  FROM acatf_adsmanager_ads as a
  LEFT JOIN acatf_paidsystem_ads as adext
  ON a.id = adext.id  
  INNER JOIN acatf_adsmanager_adcat as adcat
  ON adcat.adid = a.id  
  LEFT JOIN acatf_users as u
  ON a.userid = u.id  
  INNER JOIN acatf_adsmanager_categories as c
  ON adcat.catid = c.id  
  LEFT JOIN acatf_adsmanager_categories as p
  ON c.parent = p.id  
  WHERE  1  
  [b]AND (a.ad_poliglot LIKE '%,r,%' )[/b]
  AND  a.published = 1
  AND c.published = TRUE  
  AND c.id IN (10,1,2,3,4,5,6,7,8,9)  
  GROUP BY a.id
  ORDER BY a.date_created DESC ,a.id  DESC
  LIMIT 0, 20

 AND (a.ad_poliglot LIKE '%,r,%' )
почему то в запросе нет запрошенyого значения rus, а только буковка r

полез разбираться, нашел место где формируется этот запрос
находиться это счастье в файле /administrator/components/com_adsmanager/models/field.php
и выглядит этот участок кода вот так:

Код
foreach($fields as $fsearch){
switch($fsearch->type)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;
            ...

Может кто пояснит мне, почему в запрос не попадает значение, выбранное в выпадающем списке, а на его месте оказывается буковка r?

Забивал приведенный выше запрос непосредственно в phpMyAdmin, и если буковку r заменить на rus то все норм ищется.

В чем проблема? Помогите! !
« Последнее редактирование: 13.05.2016, 16:28:08 от orsy »
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
ПОБЕДИЛ!

Проблема была в том, что оператор switch в качестве аргумента case принимал тип поля, который был указан при создании поля в как основной, а нужно было ему передать тип, который был указан как тип поля для поиска.

Теперь все заработало!

Для тех кому интересно вот исправленный код

Код

foreach($fields as $fsearch){
$searchTypeVal = json_decode(JRequest::getVar( $fsearch->name, array() ));
//switch($fsearch->type)
switch($searchTypeVal->searchtype_render)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;
...

*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Фигню я какую-то намутил (( не работает пока поиск, копаю дальше, ибо получить тип поля не получилось пока что...
*

orsy

  • Захожу иногда
  • 400
  • 23 / 1
  • Web-Factor Ukraine
Короче вот будет самое правильное как показано ниже. Пришлось добавить еще один кейс обработки поля на тот случай когда изначально тип полу мультивыборный, а тип для поиска одиночная выпадашка + добавил под это логику

Код

function getSearchFieldsSql($fields)
    {
    if (isset($this->searchSQL)&&($this->searchSQL != ""))
    return $this->searchSQL;
   
    $search = "";
$plugins = $this->getPlugins();
foreach($fields as $fsearch){
$searchTypeRender = $fsearch->options->searchtype_render;
if($fsearch->type == 'multicheckbox' || $fsearch->type == 'multiselect'){
if($searchTypeRender == 'select'){
$searchTypeRender = 'selecttosheck';
}
}
if(!$searchTypeRender){
$searchTypeRender = $fsearch->type;
}
//switch($fsearch->type)
switch($searchTypeRender)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;

case 'selecttosheck':
$value = JRequest::getVar( $fsearch->name, "");
if ($value != ""){
if (version_compare(JVERSION,'1.7.0','<')) {
$search .= " AND ( a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value,true).",%' )";
}else{
$search .= " AND ( a.$fsearch->name LIKE '%,".$this->_db->escape($value,true).",%' )";
}
}
break;
...

« Последнее редактирование: 17.05.2016, 23:29:00 от orsy »
*

Ramil8009

  • Захожу иногда
  • 147
  • 1 / 1
У меня тоже не работает поиск, указанный код проблему не решил. У вас работает?
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Указывайте версию, пожалуйста...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с RSS

Автор uf1976

Ответов: 17
Просмотров: 8357
Последний ответ 14.07.2020, 12:31:40
от khan-alex
Проблема с изображениями

Автор ExpertZews

Ответов: 0
Просмотров: 1396
Последний ответ 26.07.2016, 21:08:12
от ExpertZews
Проблема с объявлениями на русском - AdsManager

Автор svkpro

Ответов: 24
Просмотров: 5685
Последний ответ 13.10.2015, 12:26:18
от IzrA
Проблема в фильтре AdsManager - mod_adsmanager_search

Автор Pavel_H

Ответов: 0
Просмотров: 1417
Последний ответ 04.09.2015, 19:51:07
от Pavel_H
Проблема AdsManager + gmap

Автор damirkazan

Ответов: 0
Просмотров: 1538
Последний ответ 29.08.2015, 19:06:06
от damirkazan