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

More100

  • Новичок
  • 3
  • 0 / 0
  • prodamtebe.ru
Несколько недель ломаю голову над одним вопросом, уже весь мозг себе вынес - результата нет. Поэтому прошу
помощи . Вопрос по компоненту DJClassifieds. Данный компонент очень хорошо подходит как доска объявлений
для Joomla. Но в нем нет такого понятия как 'регион'(территориальный регион) (чтобы сделать объявления с привязкой к региону) - например
Цель - разместить разкрывающийся список (например в виде SHOW) - и по выбору из этого списка производить показ оюъявлений

Рязанская область, Пензенская область и т.д.
Решил это сделать. Что смог сделать:
1. Создал таблицу - _djcf_region  - справочник регионов c полями region_id, region_name
для примера :
   1 - Рязанская область
   2 - Пензенская область
2. Добавил поле region_id  в таблицу объявлений (_djcf_items)

Далее на примере вида show - МНЕ НУЖНО ПОНЯТЬ ПРИНЦИП РЕШЕНИЯ ПРОБЛЕМЫ!

В модель models\show.php добавляем функцию выборки списка регионов из справочника регионов:

Код
class DjclassifiedsModelShow extends JModel
{
.........................
function getRegiones() {
$db= &JFactory::getDBO();
$query = "SELECT region_id as value,region_name as text FROM #__djcf_region order by text ";
$db->setQuery($query);
$regiones=$db->loadObjectList();

return $regiones;
}
...................................
}
т.е. список выбрали

Далее в com_djclassifieds\views\show\view.html.php  добавляем формирование раскрывающегося этих регионов

Код
//читаем параметр rid (это код региона региона)
$filter_regid = JRequest::getVar( 'rid',0,'default','int' );  - читаем параметр rid ('это код региона регион)
// это реакция на выбор из списка регионов в форме
$javascript = 'onchange="document.djclassifiedsForm.submit();"';
// Формируем элементы списка
$regionlist = array();
$regionlist=$model->getRegiones();
$regions=array();
// Задаем начальный элемент
$regions[]=JHTML::_('select.option',  '0', "Все регионы", 'value', 'text' );
$regions=array_merge($regions,$regionlist);
// Формируем список польностью
$lists['regions']= JHTML::_( 'select.genericlist',$regions,'rid',$javascript,'value','text',$filter_regid);
$this->assignref('lists', $lists);
Далее в com_djclassifieds\views\show\tmpl\default.php
 выводим этот список

Код
<form name="djclassifiedsForm" id="djclassifiedsForm" method="post" action="index.php">

<div> Тут будет регион
<?php
echo $this->lists['regions']; ?>
</div>
<!-это название компонента->
<input type="hidden" name="option" value="com_djclassifieds" />  
<!-это название вида ->
<input type="hidden" name="view" value="show" />
<!-это для пагинации ->  -
<input type="hidden" name="limitstart" value="0" />
<!-это читаем и сохряняем текущую категорию ->
<input type="hidden" name="cid" value="<?php echo JRequest::getVar('cid','0'); ?>" />
<!-это читаем и сохряняем значение Itemid ->
<input type="hidden" name="Itemid" value="<?php echo JRequest::getVar('Itemid','0'); ?>" />
</form>

Все это работает  - раскрывающийся список в виде SHOW выводиться, тут вопросов нет...  ::)

... идем далее

Теперь нам нужно, чтобы объявления выводились с учетом выбранного из списка региона  - т.е. модифицируем выборку объявлений
добавив туда еще и критерий региона (значение фильтра для региона)

В моделe models\show.php за эту выборку отвечает function getElements($id)

измененная мною function getElements($id) приведена ниже - изменения указаны в комментарии

Код
function getElements($id){

global $mainframe;
$list = implode(",", $id);
$par =& $mainframe->getParams('com_djclassifieds');

$limit = JRequest::getVar('limit', $par->get('limit_djitem_show'), '', 'int');
$limitstart = JRequest::getVar('limitstart', 0, '', 'int');

$search = '';
if(JRequest::getVar('search','0','string')!='0'){
$search = " AND i.name LIKE '%".JRequest::getVar('search','0','string')."%' ";
}
$reg_id='';
// проверяем значение rid и формируем еще одно дополнительное условие where для выборки
if(JRequest::getVar('rid','0','','int')>'0' && JRequest::getVar('rid','0','','int')<'99999') {
$reg_id= " AND i.region_id = ".JRequest::getVar('rid','0','','int')." "; ?>
// -------------- сформировали -- оно в $reg_id;

<script type="text/javascript">
//alert("<?php echo $reg_id; ?>");
</script>


<?php

}

$db= &JFactory::getDBO();
$order = JRequest::getVar('order');

$ord="i.id DESC";
if($order=="date"){
$ord="i.date_start DESC, i.id DESC ";
}elseif($order=="display"){
$ord="i.display DESC ";
}elseif($order=="description"){
$ord="i.intro_desc ";
}elseif($order=="category"){
$ord="c.name ";
}elseif($order=="title"){
$ord="i.name ";
}

$date_time =& JFactory::getDate();
$date_all=$date_time->toMySQL();
$date = explode(' ',$date_all);
// вот тут подцепляем это дополнительное условие $reg_id
$query = "(SELECT i.*, c.name AS c_name FROM #__djcf_items i, #__djcf_categories c WHERE i.cat_id = c.id AND i.cat_id IN (".$list.") AND i.date_exp > '".$date[0]."' AND i.published = 1 ".$reg_id." ORDER BY i.special DESC, ".$ord.")";

$tab = $this->_getList($query, $limitstart, $limit);
return $tab;

На этом мои знания иссякли
Что работает - теперь значение кода региона передается в браузере через rid
Если в браузере набираем mysite/index.php?option=com_djclassifieds&view=show&cid=1&Itemid=16&rid=1

результат выводятся все объявления Рязанской области (для примера), раскрывающийся список принимает значение Рязанской области

Если в браузере набираем mysite/index.php?option=com_djclassifieds&view=show&cid=1&Itemid=16&rid=2
то выводятся все объявления Пензенской области, раскрывающийся список принимает значение Пензенской области

Все это радует

А теперь ПРОБЛЕМА

Как заставить браузер переходить на ссылку mysite/index.php?option=com_djclassifieds&view=show&cid=1&Itemid=16&rid=1
при выборе из списка региона №1
или на ссылку mysite/index.php?option=com_djclassifieds&view=show&cid=1&Itemid=16&rid=2 при выборе из списка региона №2

У меня при выборе любого элемента из списка осуществляется переход на мysite/index.php (логично, в форме же указано
  index.php :)))).

Хотя фильтр отрабатывает верно

Наверно нужно делать файл типа Route.php - чтоб праильно сформировать ссылку.... вот в этом у меня и затык.. crazy!
« Последнее редактирование: 28.12.2011, 16:46:47 от More100 »
*

More100

  • Новичок
  • 3
  • 0 / 0
  • prodamtebe.ru
Re: Добавление поля Регион в DJClassifieds
« Ответ #1 : 29.12.2011, 17:14:37 »
Допер сам - не знаю правильно или нет, но работает
В контроллер нужно добавить функцию формирования ссылки и редирект

Код
function filter_reg()
{
$redirect='index.php?option=com_djclassifieds&view=show&cid='.JRequest::getVar('cid','0').'&Itemid='.JRequest::getVar('Itemid','0').'&rid='.JRequest::getVar('rid','0');
$redirect= JRoute::_($redirect);
$this->setRedirect($redirect);
}

а в форме, где формируется раскрывающийся список исправить строку

Код
 <input type="hidden" name="view" value="show" />

на

Код
 <input type="hidden" name="view" value="filter_reg" />
   
*

rBD

  • Новичок
  • 1
  • 0 / 0
Re: Добавление поля Регион в DJClassifieds
« Ответ #2 : 13.01.2012, 13:51:32 »
А дубли у Вас этот компонент не плодит? У меня с этим большая, нерешаемая проблема возникла
*

More100

  • Новичок
  • 3
  • 0 / 0
  • prodamtebe.ru
Re: Добавление поля Регион в DJClassifieds
« Ответ #3 : 30.01.2012, 20:35:40 »
Дубли вроде не плодит - не замечел такую проблему - опишите по подробнее. Результат работы выбора и использования (например в "последних" объявлениях)  региона можно посмотреть на сайте http://ProdamTebe.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться