banzai72

Участники
  • Публикации

    600
  • Зарегистрирован

  • Посещение

  • Days Won

    16

Сообщения, опубликованные пользователем banzai72


  1. 3 минуты назад, TopRaN сказал:

    Эта переменная формируется из системы

    
    if(!$has_result && preg_match('/user(\d+).html/', $_SERVER['REQUEST_URI'], $matches)){
    			$this->setRequestValue('user_id', (int)$matches[1]);
    			$this->template->assert('agent_info', $this->getAgent((int)$matches[1]));
    			$this->template->assert('main', '<p><br></p>'.$this->grid_adv());
    			$work_subcontroller='realtygrid';

     

    спасибо


  2. 8 часов назад, metrpro сказал:

    Даже удивительно, что никто не сравнивает тут свои ИКСы )))

    Кстати, смотрю - на cmsmagazine заменили ТИЦ на ИКС - в первой 20ке для нашего sitebill 3 созданных мною сайта!

    Вот мы ))))

    BANZAI.jpg


  3. 11 час назад, doma сказал:

    Надо попробовать -но у нас шаблон реалия.

    И еще подскажите пожалуйста, а что значит поиск по сотруднику - у вас у каждого сотрудника свой ID ? или  там просто фио?

    Если все же выбор по айди - то получается можно обычному пользователю выбрать  объявления только по конкретному пользователю ? например у вас всего 30 сотрудников. а вы вписали только айди например 8 пользователей ? и получается в выпадающем списке будут эти 8 пользователей?

    и написал вам еще в личку

    не усложняйте мысль. Всё просто. Просто поиск по сотруднику(как поиск по улицам). Начинаете писать фамилию, выбираете нужного сотрудника и видите только его объявления.


  4. В 15.10.2018 в 19:38, doma сказал:

    Подскажите а как сделать поиск по группе ? например сделать поиск только по объявлениям первой группы или только второй или только третьей.
    Например выбираем однокомнатные и от группы пользователь -подразумевает собственника. 
    Следует сразу учесть что например всего на сайте 6 групп? а в списке чтобы было только 3 -собственник агентство застройщик.
    Интересует как сделать именно выбор объявлений через форму поиска , а не просто где то вывести принадлежность к группе. спасибо

    В фильтр:

    <div class="col-md-2">
                                              <label>Поиск по группе</label>
                        {$users_groups_list}
                                       {if $country_list ne ''}
                                       {$country_list}
                                       {/if}
                                        </div>

     

    А в /home/uqirahbm/public_html/template/frontend/ВАШ ШАБЛОН/main/main.php

    $this->getNewest();

            $groups=array();
            $DBC=DBC::getInstance();
            $query='SELECT group_id, name FROM '.DB_PREFIX.'_group WHERE group_id NOT IN (1,4,19,26,27,28,33) ORDER BY name';
            $stmt=$DBC->query($query);
            $select='<option value="">Не важно</option>';

            if($stmt){
                while($ar=$DBC->fetch($stmt)){
                    $groups[$ar['group_id']]=$ar['name'];
                    $select.='<option value="'.$ar['group_id'].'"'.(intval($_GET['group_id'])==$ar['group_id'] ? ' selected="selected"' : '').'>'.$ar['name'].'</option>';
                }
            }
            $this->template->assign('users_groups_list', '<select name="group_id">'.$select.'</select>');
            $this->template->assign('users_groups', $groups);

     

    (В скобках запрещенные к показу группы)

     

    А если поиск по пользователям то в фильтре:

    <div class="col-md-2">
                                              <label>Поиск по сотруднику</label>
                                            {$users_users_list}
                        <!--select name="user_id"><option value="">Не важно</option></select-->

                                        </div>

    А в main.php^

     

        $users=array();
            $DBC=DBC::getInstance();
            $query='SELECT user_id, fio FROM '.DB_PREFIX.'_user WHERE group_id NOT IN (1,4,18,19,26,27,32,38) ORDER BY fio';
            $stmt=$DBC->query($query);
            $select='<option value="">Не важно</option>';

            if($stmt){
                while($ar=$DBC->fetch($stmt)){
                    $users[$ar['user_id']]=$ar['fio'];
                    $select.='<option value="'.$ar['user_id'].'"'.(intval($_GET['user_id'])==$ar['user_id'] ? ' selected="selected"' : '').'>'.$ar['fio'].'</option>';
                }
            }
            $this->template->assign('users_users_list', '<select name="user_id">'.$select.'</select>');
            $this->template->assign('users_users', $users);

     

     

    Вот мой файл:

    main.php


  5. 1 час назад, dima сказал:

    Добрый вечер подскажите как вести кнопки страниц в блок сортировка. на скрине показал

    Screenshot_10.thumb.jpg.16d391e94d1102eecc30144312302933.jpg

    Вывести здесь.

    Screenshot_11.thumb.jpg.31434d262bff351469591cdde4b744c0.jpg

     

     

     

    В шаблоне real-spaces это в realty_grid.tpl

     

    <!--noindex-->
    {if $grid_items|count>0}
           {foreach from=$pager_array.pages item=pager_page}
            {if $pager_page.current==1}
                {assign var=__curpagenr value=$pager_page.text}
            {/if}
        {/foreach}

        {if $__curpagenr-3<1}
            {assign var=__startnr value=1}
            {assign var=__leftsep value=0}
        {else}
            {assign var=__startnr value=$__curpagenr-3}
            {assign var=__leftsep value=1}
        {/if}

        {if $__curpagenr+3>$pager_array.pages|count}
            {assign var=__endnr value=$pager_array.pages|count}
            {assign var=__rightsep value=0}
        {else}
            {assign var=__endnr value=$__curpagenr+3}
            {assign var=__rightsep value=1}
        {/if}

        {if $pager_array.pages|count>1}
        <div>
        <ul class="pagination">
            <li><a href="{$pager_array.ppn.href}">&lsaquo;</a></li>
            {if $__leftsep==1}
            <li><a href="{$pager_array.pages[1].href}">{$pager_array.pages[1].text}</a></li>
            <li><a href="javascript:void(0);" class="selected">...</a></li>
            {/if}
            {foreach from=$pager_array.pages item=pager_page}
            {if $pager_page.text>=$__startnr && $pager_page.text<=$__endnr}
            <li{if $pager_page.current==1} class="active"{/if}><a href="{$pager_page.href}">{$pager_page.text}</a></li>
            {/if}
            {/foreach}
            {if $__rightsep==1}
            <li><a href="javascript:void(0);" class="selected">...</a></li>
            <li><a href="{$pager_array.pages[$pager_array.pages|count].href}">{$pager_array.pages[$pager_array.pages|count].text}</a></li>
            {/if}
            <li><a href="{$pager_array.npn.href}">&rsaquo;</a></li>
        </ul>
        </div>
        {/if}
    {/if}
    <!--/noindex-->


  6. В 13.09.2018 в 13:03, abushyk сказал:

    давайте вернемся к стартовому посту. что вы сделали, что бы по отметке вашего чекбокса показывались только 18-тигрупповые? Плотому что если в лоб, то вам нужно сделать для непоказа то же самое, только инвертировать условие отбора. Типа было В 18-й, а станет НЕ В 18-й

    Это наверное будет слишком нагло с моей стороны, но я попробую спросить.....

    Как можно сделать то же самое с новостройками. Поставить в фильтр чекбокс "Только новостройки". Название колонки новостройки у меня в data "new_flat"


  7. УРА!!! ПОЛУЧИЛОСЬ!!! СПАСИБО!

    Ошибка была в :


        /*Если юзеров из запрещенных групп более нуля, то добавляем условие в выборку объектов*/
        /*с исключением этих юзеров*/
        if(!empty($hide_users)){
            $where_array[]=DB_PREFIX.'_data.iser_id NOT IN ('.implode(',', $hide_users).')';
        }

    }

     

    iser заменил на user


  8. 21 час назад, abushyk сказал:

    Задача своlbтся к стандартной задаче добавления нового элемента формы поиска и обеспечения фильтрации по нему (это если такое поведение должно быть именно с фильтра)

    Делается в два шага:

    1. собственно добавление элемента на форму

    Для этого выбираем имя параметра под которым признак будет проходить в запросах. Например hide_smth. Для большей гибкости мы не будем водить этот параметр по конкретному значению, как в примере =18. Потому что если завтра мы решим как-то расширить диапазон тех, кого прячем, нам не нужно будет править это 18 на 20 или изголяться, что бы сложить туда идешки двух групп. Логику определения, что спрятать, мы уберем в код, который будет формировать запрос. А снаружи оставим только просто параметр, наличие которого будет нам говорить не "что именно нужно спрятать", а "что нам нужно в целом что-то спрятать, а ты сам реши уже что именно".

    ПС. Использование в той же переменной name="group_id" value="18" конкретного значения 18 приводит еще к тому, что подменяя 18 на другие ИД (15, 1, 22) я смогу управлять фильтрацией снаружи, без учета того, что хотел владелец сайта предоставить мне. Это не всегда критично, но иногда может вылезти очень сильно боком (особенно если код обработчик просто принимает это число из запроса и ставит его в условия фильтрации без каких либо внутренних проверок).

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

    Поэтому на форме мы размещаем хтмл вида

    
    <input class="checkbox" type="checkbox" name="hide_smth" value="1"{if intval($smarty.get.hide_smth)==1} checked="checked"{/if} /><label class="ch">Не показыват ЭТИХ</label>

    2. прописывание логики поиска

    Что бы наш параметр учелся в поиске, мы должны его перехватить и обработать. Для этого мы используем или tempalte_search или локализацию grid_constructor.

    Для варианта tempalte_search внутри public function getParams() перехватываем параметр

    
    if(1===intval($this->getRequestValue('hide_smth'))){
    $params['hide_smth'] = 1;
    }

    и добавляем обработку внутри public function run()

    
    if(isset($params['hide_smth'])){
    	$DBC=DBC::getInstance();
    	$hide_users=array();
        /*получаем ИД юзеров из "запрещенных" групп*/
        /*вместо 1,2,3,4 через запятую поставить ИД этих групп*/
        $query='SELECT `user_id` FROM '.DB_PREFIX.'_user WHERE `group_id` IN (1,2,3,4)';
        $stmt=$DBC->query($query);
        if($stmt){
            while($ar=$DBC->fetch($stmt)){
                $hide_users[]=$ar['user_id'];
            }
        }
    	/*Если юзеров из запрещенных групп более нуля, то добавляем условие в выборку объектов*/
    	/*с исключением этих юзеров*/
        if(!empty($hide_users)){
            $where_array[]=DB_PREFIX.'_data.iser_id NOT IN ('.implode(',', $hide_users).')';
        }
    
    }

     

    В standart_search_form2.tpl  вставил :

    <input style="float:left;" class="checkbox" type="checkbox" name="group_id" value="18" /><label class="ch"><strong><font color="#B22222">ТОЛЬКО СОБСТВЕННИКИ</font></strong></label><br><br>    
    <input class="checkbox" type="checkbox" name="hide_smth" value="1"{if intval($smarty.get.hide_smth)==1} checked="checked"{/if} /><label class="ch">Все кроме собственников</label>

     

     

     

    В  /home/uqirahbm/public_html/template/frontend/real-spaces/main/template_search.php         сделал так:

     

     

    <?php
    class Template_Search extends SiteBill {
        public function getParams(){

            $params=array();
            
            if(1===intval($this->getRequestValue('hide_smth'))){
    $params['hide_smth'] = 1;
    }

            
            if($this->getRequestValue('land_square_min') != '' ){
                $params['land_square_min'] = $this->getRequestValue('land_square_min');
            }
            
            if($this->getRequestValue('srch_word') != '' ){
                $params['srch_word'] = $this->getRequestValue('srch_word');
            }
            
            if($this->getRequestValue('land_square_max') != '' ){
                $params['land_square_max'] = $this->getRequestValue('land_square_max');
            }
            if(intval($this->getRequestValue('group_id')) >0 ){
                $params['group_id'] = intval($this->getRequestValue('group_id'));
            }
            return $params;
        }

        public function run(){
            $params=$this->getParams();
            $where_array=array();
            require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php');
            $data_model = new Data_Model();
            $data_model_array = $data_model->get_kvartira_model(false);
            $data_model_array=$data_model_array['data'];

            if(isset($params['hide_smth'])){
        $DBC=DBC::getInstance();
        $hide_users=array();
        /*получаем ИД юзеров из "запрещенных" групп*/
        /*вместо 1,2,3,4 через запятую поставить ИД этих групп*/
        $query='SELECT `user_id` FROM '.DB_PREFIX.'_user WHERE `group_id` IN (18)';
        $stmt=$DBC->query($query);
        if($stmt){
            while($ar=$DBC->fetch($stmt)){
                $hide_users[]=$ar['user_id'];
                
            }
        }
        /*Если юзеров из запрещенных групп более нуля, то добавляем условие в выборку объектов*/
        /*с исключением этих юзеров*/
        if(!empty($hide_users)){
            $where_array[]=DB_PREFIX.'_data.iser_id NOT IN ('.implode(',', $hide_users).')';
        }

    }
            
            if(isset($params['land_square_min']) && isset($data_model_array['land_square'])){
                $where_array[]=DB_PREFIX."_data.land_square >= ".$params['land_square_min'];
            }
            
            if(isset($params['srch_word'])){
                $where_array[]= '('.DB_PREFIX.'_data.text LIKE \'%' . $params['srch_word'] . '%\''.' OR '.DB_PREFIX.'_data.address LIKE \'%' . $params['srch_word'] . '%\''.' 
                OR '.DB_PREFIX.'_data.street_id in (select street_id from '.DB_PREFIX.'_street where name like \'%' . $params['srch_word'] . '%\')
                OR '.DB_PREFIX.'_data.city_id in (select city_id from '
                    .DB_PREFIX.'_city where name like \'%' . $params['srch_word'] . '%\')
                OR '.DB_PREFIX.'_data.district_id in (select district_id from '.DB_PREFIX.'_district where name like \'%' . $params['srch_word'] . '%\')
                OR '.DB_PREFIX.'_data.Mikrorayony_id in (select Mikrorayony_id from '.DB_PREFIX.'_Mikrorayony where name like \'%' . $params['srch_word'] . '%\')
                OR '.DB_PREFIX.'_data.complex_id in (select complex_id from '.DB_PREFIX.'_complex where name like \'%' . $params['srch_word'] . '%\') )
                ';
            }
            
            if(isset($params['land_square_max']) && isset($data_model_array['land_square'])){
                $where_array[]=DB_PREFIX."_data.land_square <= ".$params['land_square_max'];
            }
            if(isset($params['group_id'])){
                $where_array[]=DB_PREFIX."_data.user_id IN (SELECT user_id FROM ".DB_PREFIX."_user WHERE group_id=".$params['group_id'].")";
            }
            
            if($params['phone'] == 1 && isset($data_model_array['phone'])){
                $where_array[]=DB_PREFIX.'_data.owner_phone ='.$params['phone'];

        

     }

    $phone = trim($this->getRequestValue('phone'));if(''!==$phone){   $params['phone'] = $phone;  }    if(isset($params['phone'])){            $where_array[]='('.DB_PREFIX.'_data.owner_phone LIKE "%'.$params['phone'].'%")';        }
            return array(
                'where'=>$where_array,
                'params'=>$params        
            );
        }
    }

    Не получилось. при использовании данного чекбокса не выдает не одного объявления (

    Подскажите пожалуйста, что я не так понял, не так делаю?


  9. 1 час назад, abushyk сказал:

    давайте вернемся к стартовому посту. что вы сделали, что бы по отметке вашего чекбокса показывались только 18-тигрупповые? Плотому что если в лоб, то вам нужно сделать для непоказа то же самое, только инвертировать условие отбора. Типа было В 18-й, а станет НЕ В 18-й

    Видимо это сложно для меня. Помогите пожалуйста

     


  10. Только что, abushyk сказал:

    давайте вернемся к стартовому посту. что вы сделали, что бы по отметке вашего чекбокса показывались только 18-тигрупповые?

    Ничего. Я просто посмотрел, что у меня в фильтре есть вот такой код на количестве комнат:

    <input style="float:left;" class="checkbox" type="checkbox" name="room_count[]" value="1" /><label class="ch">1</label>

    и подправил его под свои нужды вот так:

    <input style="float:left;" class="checkbox" type="checkbox" name="group_id" value="18" /><label class="ch"><strong><font color="#B22222">ТОЛЬКО СОБСТВЕННИКИ</font></strong></label>

    И получилось

     

     


  11. 1 минуту назад, abushyk сказал:

    Если что-то не понятно, то пишите в какой части - в теоретических выкладках, или в примерах реализации.

    Если честно то мне стыдно, но не понятно ничего кроме того, что вставить в фильтр код:

    <input class="checkbox" type="checkbox" name="hide_smth" value="18"{if intval($smarty.get.hide_smth)==1} checked="checked"{/if} /><label class="ch">Не показывать группу 18</label>

  12. Сделал value="18" , вставил в фильтр. Но к сожалению так и не понял, что ещё мне нужно сделать, что бы с применением этого чекбокса не показывать объявления группы 18


  13. 30 минут назад, abushyk сказал:

    Задача своlbтся к стандартной задаче добавления нового элемента формы поиска и обеспечения фильтрации по нему (это если такое поведение должно быть именно с фильтра)

    Делается в два шага:

    1. собственно добавление элемента на форму

    Для этого выбираем имя параметра под которым признак будет проходить в запросах. Например hide_smth. Для большей гибкости мы не будем водить этот параметр по конкретному значению, как в примере =18. Потому что если завтра мы решим как-то расширить диапазон тех, кого прячем, нам не нужно будет править это 18 на 20 или изголяться, что бы сложить туда идешки двух групп. Логику определения, что спрятать, мы уберем в код, который будет формировать запрос. А снаружи оставим только просто параметр, наличие которого будет нам говорить не "что именно нужно спрятать", а "что нам нужно в целом что-то спрятать, а ты сам реши уже что именно".

    ПС. Использование в той же переменной name="group_id" value="18" конкретного значения 18 приводит еще к тому, что подменяя 18 на другие ИД (15, 1, 22) я смогу управлять фильтрацией снаружи, без учета того, что хотел владелец сайта предоставить мне. Это не всегда критично, но иногда может вылезти очень сильно боком (особенно если код обработчик просто принимает это число из запроса и ставит его в условия фильтрации без каких либо внутренних проверок).

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

    Поэтому на форме мы размещаем хтмл вида

    
    <input class="checkbox" type="checkbox" name="hide_smth" value="1"{if intval($smarty.get.hide_smth)==1} checked="checked"{/if} /><label class="ch">Не показыват ЭТИХ</label>

    2. прописывание логики поиска

    Что бы наш параметр учелся в поиске, мы должны его перехватить и обработать. Для этого мы используем или tempalte_search или локализацию grid_constructor.

    Для варианта tempalte_search в 

    Спасибо. Но к сожалению это первый ваш совет который я не понял и не смог реализовать (((