TopRaN

Разделение похожих объектов.

Recommended Posts

Задача.

имея объекты в базе вывести их в одну карусель  по заданным типам используя прямую(активную) ссылку. В базе мы можем каждому объекту задать свой тип.

Пример:

Похожие объекты - Новые объекты - Специальные предложения - Свой заданный тип - Свой заданный тип 2

 

Решение чуть позже...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вижу такое решение, берем отсюда метод генерации похожих

/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/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я извиняюсь, не особо понимаю, но стараюсь =))  получается, нужно код вставить в main, и после просто вставлять 

 

 

 

protected function getSimilar2($categories, $params=array()){

 

В нужное место для отображения ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я извиняюсь, не особо понимаю, но стараюсь =))  получается, нужно код вставить в main, и после просто вставлять 

 

 

В нужное место для отображения ?

Если совсем не понимаете, тогда просто почитайте это

http://www.php.su/learnphp/phpoo/?basic

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 15 января 2015 г. в 11:49, TopRaN сказал:

Задача.

имея объекты в базе вывести их в одну карусель  по заданным типам используя прямую(активную) ссылку. В базе мы можем каждому объекту задать свой тип.

Пример:

Похожие объекты - Новые объекты - Специальные предложения - Свой заданный тип - Свой заданный тип 2


 

Решение чуть позже...


 

поделитесь решением?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас