Форум русской поддержки Joomla!® CMS
03.12.2016, 10:45:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Модуль поиска Adsmanager_search: порядок полей в модуле поиска [Готовое решение, хак]

 (Прочитано 170 раз)
0 Пользователей и 1 Гость смотрят эту тему.
orsy
Давно я тут
****

Репутация: +19/-1
Offline Offline

Пол: Мужской
Сообщений: 331


Web-Factor Ukraine


« : 12.05.2016, 15:37:49 »

Столкнулся недавно с тем что порядок отображения полей поиска в модуле mod_adsmanager_search совершенно не зависит от того в каком порядке эти самые поля указаны в его настройках.

В этом модуле есть 5 пронумерованных полей, в которые вставляются имена характеристик объявления.
Логично было ожидать что в модуле поля будут отображаться в том же порядке в котором указаны в настройках модуля, но...

Но дело в том что поля эти в модуле выводятся в том порядке, который им задан в компоненте AdsManager, не помню точно для какой части, может для формы подачи объявления или страницы отображения объявления.

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

1. Открываем файл /administrator/components/com_adsmanager/models/field.php
2. Ищем в этом файле функцию getFieldsByName содержимое оной приведено ниже

Код:
     function getFieldsByName($listfields,$usergroups=true,$mode='read') {
$query = "SELECT f.* FROM #__adsmanager_fields AS f ".
"WHERE f.name IN ($listfields) AND f.published = 1 ORDER by f.ordering" ;
$this->_db->setQuery( $query);
$searchfields = $this->_db->loadObjectList("name");

foreach($searchfields as $key => $field) {
$searchfields[$key]->options = json_decode($field->options);
}

if($usergroups) {
require_once(JPATH_ROOT.'/components/com_adsmanager/lib/tpermissions.php');
$searchfields = TPermissions::getAuthorisedFields($searchfields, $mode);
}

return $searchfields;
    }

3. Копипастим эту функцию вместе с содержимым ниже и меняем ее название например на getFieldsByPosModule
4. Заменяем вот эту часть кода:

Код:
$query = "SELECT f.* FROM #__adsmanager_fields AS f ".
"WHERE f.name IN ($listfields) AND f.published = 1 ORDER by f.ordering" ;
$this->_db->setQuery( $query);
$searchfields = $this->_db->loadObjectList("name");

на этот код

Код:
$listfieldsformod = str_replace ( "'" , "" , $listfields );
$query = "SELECT f.* FROM #__adsmanager_fields AS f "."WHERE f.name IN ($listfields) AND f.published = 1 order by find_in_set(f.name, '$listfieldsformod')";
$this->_db->setQuery( $query);
$searchfields = $this->_db->loadObjectList();

5. открываем файл /modules/mod_adsmanager_search/mod_adsmanager_search.php

6. Находим место где используется функция getFieldsByName, у меня это 52-я строка и код выглядит вот так:

Код:
if ($listfields != ""){
$searchfields = $fieldmodel->[b]getFieldsByPosModule[/b]($listfields);
$field_values = $fieldmodel->getFieldValues();

7. заменяем выделенное жирным имя функции на то которое мы указали в начале поста когда копировали функцию, у нас это было getFieldsByPosModule
После внесенных изменений код должен выглядеть так:

Код:
if ($listfields != ""){
$searchfields = $fieldmodel->getFieldsByPosModule($listfields);
$field_values = $fieldmodel->getFieldValues();

На этом все. Теперь поля в модуле будут показываться в том порядке, в котором мы их указали в настройках модуля.
Записан
moonaway
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #1 : 17.11.2016, 15:48:31 »

в 3.1.5 проблемы этой нет
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet