Clase Artic

Clase para manipulación de artículos Prontus, por medio de la creación de un objeto tipo "Artic"
Descripción

Esta clase contiene operaciones típicas a realizar con los artículos, como por ejemplo leer su XML, obtener el path de este, generar el html, parsear sus datos, etc., sin necesidad de conocer la lógica interna, solo basta instanciar correctamente el objeto de tipo 'Artic'.

Esta clase se utiliza en todas las partes de Prontus en donde se manipulan los artículos. Ademas de ser util internamente para las CGIs de prontus, tambien puede servir para simplificar la programación de post-procesos, scripts de migración de contenidos, etc., utilizando los metodos públicos y atributos de la clase.

Atributos

Los atributos que disponibiliza la clase Artic entregan información acerca del artículo.

Para acceder a los atributos de un objeto previamente instanciado, se hace de la siguiente forma:

 my $attr = $artic_obj- >{nombre_atributo};

Los atributos disponibles son los siguientes:

Path completo del directorio donde se ubican los mmedia del articulo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/mmedia'

ts Timestamp del artículo, por ejemplo '20081023172849'.
fechac String correspondiente a la fecha de creación del artículo, por ejemplo '20081023'.

fullpath_xml

Path completo al XML del articulo. Por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/xml/20081023172849.xml'
prontus_id Nombre del publicador al que pertenece el artículo, por ejemplo 'prontus_noticias'.
public_server_name Nombre del servidor donde estara publicado el artículo, por ejemplo 'www.misitio.cl'
cpan_server_name Nombre del servidor desde donde se publicará el artículo, usualmente es el mismo que public_server_name, aunque podrían diferir en caso de que por ejemplo, hayan clusters.
document_root DOCUMENT ROOT asociado al servidor del artículo, por ejemplo '/sites/misitio/web'
campos Hash con todos los campos pasados al constructor. Para acceder a alguno en particular, se puede hacer de la siguiente forma: my $plt = $artic_obj- >{campos}- >{'_plt'};
dst_base Path completo del directorio donde se ubican los archivos del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023'
dst_pags Path completo del directorio donde se ubica el html del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/pags'
dst_xml Path completo del directorio donde se ubica el xml del articulo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/xml'
dst_asocfile Path completo del directorio donde se ubican los asocfile del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/docs/20081023/20081023172849'
dst_foto Path completo del directorio donde se ubican las imag del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/imag'
dst_swf
Path completo del directorio donde se ubican los archivos swf del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/swf'
lnk_multimedia Path relativo al document root del directorio donde se ubican los archivos multimedia del artículo, por ejemplo: '/prontus_noticias/site/artic/20081023/mmedia'
pathdir_plt Path completo del directorio donde se ubican las plantillas de artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/plantillas/artic/fecha'
pathdir_plt_macros Path completo del directorio donde se ubican las macros de artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/plantillas/artic/fecha/macros'
pathdir_plt_pags Path completo del directorio donde se ubican las plantillas de la vista default de artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/plantillas/artic/fecha/pags'
Métodos

Estos son los métodos que disponibiliza la clase Artic:

generar_vista_art($mv, $stamp_demo, $prontus_key)

Genera HTML (o lo que corresponda a la plantilla) del artículo y graba el archivo. Toma como entrada los datos del XML, no los que vengan en el hash $this- >{campos}.

Parámetros:

  • $mv: Nombre de la vista en la que se desea generar el html artículo. Para la vista default, poner ''. Para otras vistas poner por ejemplo: 'pda'
  • $stamp_demo (DEPRECATED): Marca a incluir indicando que la PK no es válida. En general, si se sabe que
    el sitio ya posee una PK valida, este parametro se puede dejar como ''.
  • $prontus_key: Prontus Key del sitio. Esto se requiere para poder incluirla como comentario HTML

Retorna:

1 | 0 (exito o error). En caso de error, ademas setea la variable de clase $Artic::ERR con el texto correspondiente.

get_fullpath_artic($mv, $plt)

Obtiene el path completo al html del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/pags/20081023172849.html'.

Parámetros:

  • $mv: Nombre de la vista en la que se desea generar el html artículo. Para la vista default, poner ''. Para otras vistas poner por ejemplo: 'pda'
  • $plt: Nombre del archivo de plantilla de artículo. Puede obtenerse de los campos recibidos del form, o bien, desde el xml, invocando antes a get_xml_content()

Retorno:

El path completo al html del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/pags/20081023172849.html'.

get_xml_content()

Obtiene un hash con los campos del XML del artic. Cada entrada es del tipo nom_campo = > valor_campo Ya vienen eliminados los bloques CDATA, en caso de haberlos.

Parámetros:

Ninguno.

Retorno:

Hash con los campos del XML del artic.

parse_artic_data($fullpath_artic, $buffer, \%campos_xml, \%claves_adicionales, [$use_xml_names])

 

Parsea todas las marcas del XML mas algunas derivadas de estas en el buffer dado. Este metodo NO elimina las marcas que queden sin sustituir.

Parámetros:

  • $fullpath_artic: Path completo del html del artículo.
    Se puede obtener facilmente asi:
    my $fullpath_artic = $artic_obj- >get_fullpath_artic($mv, $campos_xml{'_plt'});
  • $buffer: String, normalmente html, en donde se deben parsear los datos del artículo.
  • \%campos_xml: Hash con los campos del XML. Si el artículo ya existe, este dato se obtiene facilmente así:
    my %campos_xml = $artic_obj- >get_xml_content();
  • \%campos_adicionales: Hash con campos custom que se deseen parsear en el buffer.
  • $use_xml_names: desde la versión 11.2.74, pasar el valor 1 en este parámetro especifica que se usen los nombres de la taxonomía del XML, en lugar de leerlos desde base de datos.

Retorna:

String con buffer parseado

get_nom_artic($plt)

Obtiene el nombre del archivo del articulo, por ejemplo: '20081023172849.html'

Parámetros:

  • $plt: Nombre del archivo de plantilla de artículo. Puede obtenerse de los campos recibidos del form, o bien, desde el xml, invocando antes a get_xml_content():
    my %campos_xml = $artic_obj- >get_xml_content();
    my $plt = $campos_xml{'_plt'};
    o bien,desde el mismo hash de campos pasado al constructor:
    my $plt = $artic_obj- >{campos}- >{'_plt'};

Retorna:

El path completo al html del artículo, por ejemplo: '/sites/misitio.cl/web/prontus_noticias/site/artic/20081023/pags/20081023172849.html'.

art_insert_bd($base, $regenerar_registro)

Crea artículo en base de datos prontus a partir de info del xml.

Parámetros:

  • $base: Handler de la base de datos de Prontus.
  • $regenerar_registro: (1|0) 1 implica sacar el autoinc del xml y usar ese. Si es 0, implica asignar uno nuevo. Este parametro es util setearlo en 1 para regeneración de tabla de artículos.

Retorna:

Id autoincremento del artículo.

Ejemplos

1. Utilizando variables globales prontus ($prontus_varglb::NOM_VARIABLE). Esta es la opción más segura y recomendada, pero requiere cargar la conf de prontus primero.

# Path conf y load config de prontus
use prontus_varglb; &prontus_varglb::init();
use lib_prontus;
my $prontus_id = 'prontus_noticias';
my $path_conf = "$prontus_varglb::DIR_SERVER/$prontus_id/cpan/$prontus_id.cfg";
$path_conf = &lib_prontus::ajusta_pathconf($path_conf);
&lib_prontus::load_config($path_conf);

# Creacion de obj Artic usando variables globales Prontus
my $artic_obj = Artic- >new(
'prontus_id' = > $prontus_varglb::PRONTUS_ID,
'public_server_name'= > $prontus_varglb::PUBLIC_SERVER_NAME,
'cpan_server_name' = > $prontus_varglb::IP_SERVER,
'document_root' = > $prontus_varglb::DIR_SERVER,
'ts' = > $ts,
'campos'= >{})
|| die("Error inicializando objeto articulo: $Artic::ERR TS[$ts]\n");

2. Creacion de obj Artic sin usar variables globales Prontus

# Creacion del obj Artic, sin var Prontus
my $artic_obj = Artic- >new(
'prontus_id' = > 'prontus_noticias',
'public_server_name'= > 'www.misitio.cl',
'cpan_server_name' = > 'prontus.misitio.cl',
'document_root' = > '/sites/misitio/web',
'ts' = > '20081023172849',
# ********** Ver Nota 1 ************
'campos'= >{})
# ********** Ver Nota 2 ************
|| die("Error inicializando objeto articulo: $Artic::ERR TS[$ts]\n");

Nota 1: El atributo 'campos' en el constructor es para poder pasarle un hash con todos los datos necesarios para poder crear un artículo. Para el caso de que solo se necesite LEER info del artículo, basta con dejarlo de la forma indicada en el ejemplo.

Nota 2: Si se trata del procesamiento de un solo artículo, generalmente el die() sera suficiente. pero en caso de que estemos procesando varios artículos dentro de un bucle, en donde se desea que aunque uno falle, se continue con el resto, en vez de die() se puede realizar algo como lo siguiente:

foreach my $ts (@arr_artic) {
# Creacion del objeto Artic.
my $artic_obj = Artic- >new(...)
|| print("Error inicializando objeto articulo: $Artic::ERR TS[$ts]\n");

# En la instruccion siguiente al constructor, revisamos si se creo el objeto y en caso negativo
# hacemos un next al siguiente articulo
next if (!ref($artic_obj));

# Si el artic se instancio OK, realizo el resto de las operaciones, por ejemplo,
# reparsearlo en todas las vistas a partir de los datos del XML:
# Para la vista ppal:
$artic_obj- >generar_vista_art('', '', $prontus_varglb::PRONTUS_KEY) || print $Artic::ERR;

# Para vistas secundarias, agregar:
foreach my $mv (keys %prontus_varglb::MULTIVISTAS) {
$artic_obj- >generar_vista_art($mv, '', $prontus_varglb::PRONTUS_KEY) || print $Artic::ERR;
};

};

3. Ejemplo de utilización de métodos del obj Artic.

# Generar vista o html del articulo.
$artic_obj- >generar_vista_art($mv, '', $prontus_varglb::PRONTUS_KEY)
|| die("Error: $Artic::ERR");

# Carga hash con campos del XML del articulo, con nombre_campo = > valor_campo
my %campos_xml = $artic_obj- >get_xml_content();