Yii Framework Forum: [RESUELTO] Obtener articulos relacionados - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[RESUELTO] Obtener articulos relacionados Buenas prácticas de programación Rate Topic: -----

#1 User is offline   netbur 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 03-June 09

Posted 03 February 2010 - 04:21 AM

Saludos :

En mi aplicación tengo articulos y etiquetas y lo he hecho según el tutorial de blog de yii, de manera que para obtener las etiquetas de un artículo llamo a $articulo->getTagArray().

Me gustaría en cada artículo poder obtener un listado de los articulos relacionados, que son aquellos que comparten subseccion_id y 2 etiquetas por lo menos.

He creado esta función en el modelo articulo, pero consume demasiados recursos creo que no es la mejor manera, sabbe alguien una manera más sencilla o puede orientarme??

public function getRelacionados($articulo_id){
	   
		ini_set('memory_limit','32M'); 
		
		$articulo=articulo::model()->find('id='.$articulo_id);

	   	$relacionados = articulo::model()->findAll('subseccion_id=:subseccion', array(':subseccion'=>$articulo->subseccion_id));
	
		$articulos = array();
		
		foreach($relacionados as $relacionado):
		 if( count(array_intersect($articulo->getTagArray(),$relacionado->getTagArray())) >=2 && $relacionado->id!=$articulo->id ) {
			array_push($articulos, $relacionado);
		 } 			
		endforeach;
		
		return $articulos;
	}


Gracias
0

#2 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 495
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 03 February 2010 - 08:19 AM

1- Si usas PHP 5.3 no vas a tener problema ya que arreglan el garbage collector. Sino el problema esta en que no la estas liberando.

2- No es mejor usar una relación en tag que te busque a los relacionados y la haces así:

public function relations{

return array(
'tagsConRelacionados'=>array(.... , 'with'=>'items'); // items es una relacion de tags que indica cuales son los items que tienen ese tag...
);
}

y cuando lo llamas ponés lo que querés..

Saludos
0

#3 User is offline   netbur 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 42
  • Joined: 03-June 09

Posted 29 April 2010 - 05:06 AM

Al final esta es la solución que he encontrado.

En el modelo artículo, una función que me devuelve los artículos relacionados que obtengo al recorrer las etiquetas del artículo(($articulo->getTagArray()), si los artículos de esa etiqueta pertenecen a la misma sección y no es el artículo del que queremos sacar los relacionados lo añado a $relacionados:

public function getRelacionados($articulo_id){   		
		
		$articulo=articulo::model()->find('id='.$articulo_id);
		
		$relacionados = array();
		foreach($articulo->getTagArray() as $name)
	    {
		    $etiqueta = etiqueta::model()->findByAttributes(array('nombre'=>$name));
		    foreach($etiqueta->articulos() as $art)
		    {
				if($articulo->subseccion_id == $art->subseccion_id && $articulo->id != $art->id)
		    	array_push($relacionados, $art);		        
		    }
		}
	    return $relacionados;
	}


Por si alguno le sirve.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users