may
5

Para compartir el uso de etiquetas entre varios dominios lo que se suele hacer es compartir una base de datos en un servidor y utilizar varias aplicaciones que comparten modelos de datos y modifican las vistas (visualizadores) para mostrar los resultados en una sinergía creada por los usuarios que rellenan artículos, contenido, noticias, productos, etc. y establecen las etiquetas asociadas a toda esta información…
La función que va en la clase tags del modelo de datos de zenphp es:
/** * Devuelve un array con todos los tags de todas las tablas que coinciden con $nombre **@TODO: Es inestable, no carga bien los modelos de datos que no estuvieran ya cargados... * * @param str $nombre * @param str $modelos * @return array */ function obtener_lista($nombre="",$modelos=""){ $nombre = str_replace("_","-",$nombre); $modelos = empty($modelos)?array("noticias","contenidos"):split(",",$modelos); if (!is_array($modelos)) return false; $etiquetas = array(); foreach ($modelos as $modelo){ $unset =false; if (!$this->padre->$modelo instanceof zen_modelo_datos) { if (!zen___importar_modelos($this->padre,$modelo)) { continue; } else { $unset = true; } } $c = split(",",$this->padre->$modelo->campos); $this->padre->$modelo->poner_campos_al_modelo(); $r = $this->padre->$modelo->obtener($c[0].",tags"); $n = count($r); for ($i=0; $i<$n; $i++){ $tags = str_replace(array(" ,",", "),",",$r[$i]['tags']); $tags = split(",",$tags); foreach ($tags as $tag){ $tag = html_entity_decode($tag); if (empty($nombre)){ //No buscamos un tag en concreto sino todos: if (!in_array($tag,$etiquetas)) //Insertar en la lista $etiquetas[] = $tag; continue; } if (zen_codifica_nombre_para_url($tag)== zen_codifica_nombre_para_url($nombre)) { if (!in_array($r[$i][$c[0]],$etiquetas)){ array_push($etiquetas,array( "modelo"=> $modelo, "id" => $r[$i][$c[0]] )); } //comprobacion de si se estaba repetida } //comprobacion de si es la buscada } //bucle foreach de tags } //bucle for que recorre todos los tags de este campo if ($unset) unset($this->padre->$modelo); } //bucle for que recorre todos los modelos especificados return $etiquetas; }
Para utilizar una función dinámica que un visualizador (html_tags extends zen_html_modelo_datos) interprete usando diferentes plantillas para cada dominio podemos usar la siguiente :
/** * Mostrara una pagina con un listado de tags, que enlazan a los distintos dominios, * se especifica el $dominio para ver cual de los contenidos han de rellenarse * * @param str $tag * @param str $dominio */ function ver($tag,$dominio=ZF_SITIO_WEB){ //Intentemos encontrar el tag $tags = $this->padre->obtener_lista($tag); $p = new zen_plantilla(); // if (!count($tags)) die(sprintf("no hay ningun elemento con el tag %s",$tag));//header("Location: ".ZF_SITIO_WEB); $r['tag'] = str_replace("_","-",zen_sanar($tag)); $r['enlaces'] = ""; foreach ($tags as $tag){ switch ($tag['modelo']){ case 'noticias': //Noticias a la web del grupo (corporativa) $tit = $this->padre->padre->noticias->obtener_campo($tag['id'],"titular"); $r['enlaces'] .= 'Noticia: <a href="'.ZF_SITIO_WEB.'noticias/ver/'.$tag['id'].'/'.zen_codifica_nombre_para_url($tit). '/">'.$tit.'</a><br>'; break; case 'contenidos': //Presentacion.. (informacion corporativa) $tit = $this->padre->padre->contenidos->obtener_campo($tag['id'],"nombre"); $zona= $this->padre->padre->contenidos->obtener_campo($tag['id'],"zona"); $r['enlaces'] .= 'Presentación: <a href="'.ZF_SITIO_WEB.'presentacion/'. $tag['id'].'/'.zen_codifica_nombre_para_url($tit). '/">'.$tit.'</a><br>'; break; } } $this->padre->padre->contenido['contenido'] = $p->contenido_reemplaza("etiquetas/indice.html",$r); switch ($dominio){ case ZF_SITIO_WEB: $this-> $this->padre->padre->contenido['columna_izda1'] = $this->listar(); $this->padre->padre->html->mostrar_web("Etiqueta ". zen_sanar($r['tag']),"sel_inicio","cab_contacto.html","rut_etiqueta.html"); break; default: //$titulo,$menu,$ruta="",$col_izda="indice" $this->padre->padre->html->mostrar_web("Etiqueta ".$tag,"sel_indice","rut_etiqueta.html","indice"); break; } } //fin-ver


Deja tu comentario