TopRaN 235 Жалоба Опубликовано: January 15, 2015 Задача.имея объекты в базе вывести их в одну карусель по заданным типам используя прямую(активную) ссылку. В базе мы можем каждому объекту задать свой тип.Пример:Похожие объекты - Новые объекты - Специальные предложения - Свой заданный тип - Свой заданный тип 2 Решение чуть позже... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: January 16, 2015 Вижу такое решение, берем отсюда метод генерации похожих/apps/system/lib/frontend/view/kvartira_view.phpИ переносим в исполняемый файл шаблона main.php $simparams=array( 'id'=>(int)$form_data['id']['value'], 'topic_id'=>(int)$form_data['topic_id']['value'], 'city_id'=>(int)$form_data['city_id']['value'], 'district_id'=>(int)$form_data['district_id']['value'], 'street_id'=>(int)$form_data['street_id']['value'], ); $this->template->assign('similar_data', $this->getSimilar($category_structure, $simparams));............ protected function getSimilar($categories, $params=array()){ $similar_items_count=(0==(int)$this->getConfigValue('similar_items_count') ? 5 : (int)$this->getConfigValue('similar_items_count')); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php'); $Structure_Manager = new Structure_Manager(); $category_structure = $Structure_Manager->loadCategoryStructure(); $DBC=DBC::getInstance(); $ret=array(); $datas=array(); $where=array(); if(!empty($params)){ $ids[]=$params['id']; $where['active']='active=1'; if($params['street_id']!=0){ $where['street_id']='street_id='.$params['street_id']; } if($params['topic_id']!=0){ $where['topic_id']='topic_id='.$params['topic_id']; } if($params['city_id']!=0){ $where['city_id']='city_id='.$params['city_id']; } if($params['district_id']!=0){ $where['district_id']='district_id='.$params['district_id']; } if($params['id']!=0){ $where['id']='id NOT IN ('.implode(',',$ids).')'; } $q='SELECT id FROM '.DB_PREFIX.'_data'.(!empty($where) ? ' WHERE '.implode(' AND ',$where) : '').' LIMIT '.$similar_items_count; $stmt=$DBC->query($q); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ret[]=$ar['id']; $ids[]=$ar['id']; } } if(count($ret)<$similar_items_count){ unset($where['district_id']); unset($where['street_id']); $where['id']='id NOT IN ('.implode(',',$ids).')'; $q='SELECT id FROM '.DB_PREFIX.'_data'.(!empty($where) ? ' WHERE '.implode(' AND ',$where) : '').' LIMIT '.$similar_items_count; $stmt=$DBC->query($q); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ret[]=$ar['id']; $ids[]=$ar['id']; } } } if(count($ret)<$similar_items_count){ unset($where['city_id']); //unset($where['street_id']); $where['id']='id NOT IN ('.implode(',',$ids).')'; $q='SELECT id FROM '.DB_PREFIX.'_data'.(!empty($where) ? ' WHERE '.implode(' AND ',$where) : '').' LIMIT '.$similar_items_count; $stmt=$DBC->query($q); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ret[]=$ar['id']; $ids[]=$ar['id']; } } } if(count($ret)<$similar_items_count){ $last=$similar_items_count-count($ret); unset($where['topic_id']); $where['id']='id NOT IN ('.implode(',',$ids).')'; $q='SELECT id FROM '.DB_PREFIX.'_data'.(!empty($where) ? ' WHERE '.implode(' AND ',$where) : '').' LIMIT '.$last; $stmt=$DBC->query($q); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ret[]=$ar['id']; $ids[]=$ar['id']; } } } } require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/model/model.php'); $data_model = new Data_Model(); $form_data = $data_model->get_kvartira_model(false, false); $hasTlocation=false; foreach($form_data['data'] as $key=>$val){ if($val['type']=='tlocation'){ $hasTlocation=true; $tlocationElement=$key; break; } } $i=0; foreach($ret as $r){ $form_data = $data_model->get_kvartira_model(false, false); $form_data = $data_model->init_model_data_from_db ( 'data', 'id', $r, $form_data['data'], true ); //print_r($form_data); $form_data['topic_id']['value_string']=$categories['catalog'][$form_data['topic_id']['value']]['name']; if(1==$this->getConfigValue('apps.seo.level_enable')){ if($category_structure['catalog'][$form_data['topic_id']['value']]['url']!=''){ $form_data['parent_category_url']=$category_structure['catalog'][$form_data['topic_id']['value']]['url'].'/'; }else{ $form_data['parent_category_url']=''; } }else{ $form_data['parent_category_url']=''; } if(1==$this->getConfigValue('apps.seo.data_alias_enable') && $form_data['translit_alias']['value']!=''){ $form_data['href']=SITEBILL_MAIN_URL.'/'.$form_data['parent_category_url'].$form_data['translit_alias']['value']; //$ra[$item_id]['href']=SITEBILL_MAIN_URL.'/'.$ra[$item_id]['parent_category_url'].$this->getTranslitAlias($ra[$item_id]['city'],$ra[$item_id]['street'],$ra[$item_id]['number']); }elseif(1==$this->getConfigValue('apps.seo.html_prefix_enable')){ $form_data['href']=SITEBILL_MAIN_URL.'/'.$form_data['parent_category_url'].'realty'.$form_data['id']['value'].'.html'; }else{ $form_data['href']=SITEBILL_MAIN_URL.'/'.$form_data['parent_category_url'].'realty'.$form_data['id']['value']; } if($hasTlocation){ $form_data['country_id']['value_string']=$form_data[$tlocationElement]['value_string']['country_id']; $form_data['region_id']['value_string']=$form_data[$tlocationElement]['value_string']['region_id']; $form_data['city_id']['value_string']=$form_data[$tlocationElement]['value_string']['city_id']; $form_data['district_id']['value_string']=$form_data[$tlocationElement]['value_string']['district_id']; $form_data['street_id']['value_string']=$form_data[$tlocationElement]['value_string']['street_id']; } $datas[]=$form_data; $i++; if($i==5){ break; } } /*echo '<pre>'; print_r($datas); echo '</pre>';*/ return $datas; }Затем для каждой новой выборки создаем копию метода, но с другим именем, например protected function getSimilar2($categories, $params=array()){Внутри метода придумываем свою логику.В принципе можно таких функций накопировать сколько угодно, не затрагивая логику работы /apps/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
DoobBY 9 Жалоба Опубликовано: January 11, 2016 Я извиняюсь, не особо понимаю, но стараюсь =)) получается, нужно код вставить в main, и после просто вставлять protected function getSimilar2($categories, $params=array()){ В нужное место для отображения ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: January 12, 2016 Я извиняюсь, не особо понимаю, но стараюсь =)) получается, нужно код вставить в main, и после просто вставлять В нужное место для отображения ?Если совсем не понимаете, тогда просто почитайте этоhttp://www.php.su/learnphp/phpoo/?basic Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
doma 22 Жалоба Опубликовано: May 1, 2016 В 15 января 2015 г. в 11:49, TopRaN сказал: Задача. имея объекты в базе вывести их в одну карусель по заданным типам используя прямую(активную) ссылку. В базе мы можем каждому объекту задать свой тип. Пример: Похожие объекты - Новые объекты - Специальные предложения - Свой заданный тип - Свой заданный тип 2 Решение чуть позже... поделитесь решением? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах