From: Martín Marrese Date: Fri, 2 May 2003 23:03:42 +0000 (+0000) Subject: - Muchas modificaciones. X-Git-Tag: svn_import~526 X-Git-Url: https://git.llucax.com/mecon/meconlib.git/commitdiff_plain/3b53a78c315679eaa81ee631458f248f9e3e1ac9 - Muchas modificaciones. Solamente falta terminar con la serializacion del array asociativo pagina-seccion. Faltan terminar los metodos toHtml de los objetos MenuVertical y MenuHorizontal --- diff --git a/marco/doc/uml/Marco.xmi b/marco/doc/uml/Marco.xmi index 6a9f80e..0c0c7f1 100644 --- a/marco/doc/uml/Marco.xmi +++ b/marco/doc/uml/Marco.xmi @@ -9,7 +9,7 @@ - + @@ -31,9 +31,13 @@ Trabaja de forma general, llamando a los demas objetos para la realizacion del m + + + + @@ -99,14 +103,13 @@ Trabaja de forma general, llamando a los demas objetos para la realizacion del m - + - @@ -120,9 +123,11 @@ Trabaja de forma general, llamando a los demas objetos para la realizacion del m - + + + + - @@ -130,11 +135,16 @@ Trabaja de forma general, llamando a los demas objetos para la realizacion del m + + + + - + @@ -179,55 +189,55 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> - + - + - + - - + + - + - + - - + + - + - + - + @@ -238,38 +248,38 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> - + - + - - + + - + - - + + - + - + - - + + - + - - + + @@ -309,6 +319,7 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> + @@ -323,13 +334,13 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> + - @@ -339,7 +350,7 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> - + @@ -348,8 +359,8 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> - + @@ -371,15 +382,17 @@ x2c:include: HTML/Page.php" name="HTML_Page" static="0" scope="200" /> + + - + diff --git a/marco/php/marco/Marco.php b/marco/php/marco/Marco.php index ccfbbdc..c97a381 100644 --- a/marco/php/marco/Marco.php +++ b/marco/php/marco/Marco.php @@ -76,6 +76,15 @@ class Marco extends HTML_Page { */ var $_titulo; + /** + * Titulo que quiere agregar el usuario al titulo del sistema + * + * @var string $titulo2 + * + * @access private + */ + var $_titulo2; + /** * Referencia al objeto Copete. * @@ -128,10 +137,10 @@ class Marco extends HTML_Page { { // var_dump(get_included_files()); - parent::HTML_Page(array ('charset' => 'utf-8', + parent::HTML_Page(array ('doctype'=>'HTML 4.01 Transitional', + 'charset' => 'iso-8859-1', 'lineend' => 'unix', - 'doctype' => 'strict', - 'language' => 'en', + 'language' => 'es', 'cache' => 'false', 'simple' => 'true')); @@ -141,6 +150,7 @@ class Marco extends HTML_Page { $this->_copete = new Copete ($this->_directorio); $this->_menu = new Menu ($this->_directorio); $this->_pie = new Pie ($this->_configuracion); + $this->_contenido = ''; } // -X2C @@ -272,7 +282,7 @@ class Marco extends HTML_Page { */ function addBody($body) // ~X2C { - $this->_contenido = $body; + $this->_contenido.= $body; } // -X2C @@ -286,7 +296,9 @@ class Marco extends HTML_Page { */ function _header_display() // ~X2C { - $this->setTitle($this->_titulo->darTitulo()); + $tmp = $this->_titulo->darTitulo().$this->_titulo2; + $this->setTitle($tmp); + $this->addMetaData("author", 'Martin Marrese '); $this->addScript(SCRIPT_DIR_BASE.SCRIPT_GENERICO); $this->addStyleSheet(ESTILO_DIR_BASE.ESTILO_GENERICO); } @@ -315,18 +327,16 @@ class Marco extends HTML_Page { $TABLA_INTERNA = new HTML_Table('width=760 align="center" bgcolor="#FFFFFF" cellspacing="0" cellpadding="0" border="0"'); //Armo el body completo (con menu o titulo) //Obtengo el menu de la seccion seleccionada - $SecSel = $this->_menu->darSecSel(); - if (!is_null($SecSel)){ - - if (!($SecSel->darTipoMenu() == 'oculto')) { - $row = array ($SecSel->menuToHtml()); + if (isset($_SESSION['tipoMenu'])){ + if (!($_SESSION['tipoMenu'] == 'oculto')) { + // $row = array ($SecSel->menuToHtml()); } else { - $row = array ($SecSel->tituloToHtml()); + // $row = array ($SecSel->tituloToHtml()); } $ri = $TABLA_INTERNA->addRow($row,"align=\"center\" bgcolor=\"#FFFFFF\""); } - if (!is_null($SecSel) && $SecSel->darTipoMenu() == 'vertical') { + if (isset($_SESSION['tipoMenu']) && $_SESSION['tipoMenu'] == 'vertical') { $row = array ($this->_contenido); $TABLA_INTERNA->setCellContents($ri,1,$row); $TABLA_INTERNA->setCellAttributes($ri,1,"align=\"center\" bgcolor=\"#FFFFFF\""); @@ -348,6 +358,22 @@ class Marco extends HTML_Page { } // -X2C + // +X2C Operation 124 + /** + * Funcion que permite adosar al titulo del sistema el titulo de la pagina. + * + * @param string $titulo Titulo de la pagina. + * + * @return void + * + * @access public + */ + function addTitle($titulo) // ~X2C + { + $this->_titulo2 = ' - '.$titulo; + } + // -X2C + } // -X2C Class :Marco ?> diff --git a/marco/php/marco/Menu.php b/marco/php/marco/Menu.php index 0276df3..8daeff3 100644 --- a/marco/php/marco/Menu.php +++ b/marco/php/marco/Menu.php @@ -28,7 +28,9 @@ require_once 'Seccion.php'; require_once 'include/lib/HTML/Table.php'; define ('PRE_DIR' ,'/var/www/intranet/www/sistemas/'); -define ('POST_DIR','/conf/MenuSerializado'); +define ('POST_DIR','/conf/'); +define ('MENU_SERIALIZADO','MenuSerializado'); +define ('ARRAYSECCIONES_SERIALIZADO','ArraySeccionesSerializado'); // +X2C Class 14 :Menu /** @@ -91,15 +93,6 @@ class Menu { */ var $_imagen; - /** - * Contiene el objeto seccion seleccionada - * - * @var Seccion $seccionSelect - * - * @access private - */ - var $_seccionSelect; - // ~X2C // +X2C Operation 56 @@ -115,15 +108,19 @@ class Menu { function Menu($directorio = null) // ~X2C { if (!is_null($directorio)) { -// if (file_exists(PRE_DIR.$directorio.POST_DIR)) { +// if (file_exists(PRE_DIR.$directorio.POST_DIR.MENU_SERIALIZADO)) { //ESTA SERIALIZADO EL OBJETO // $this = $this->_obtenerArchivo($directorio); // } // else { //NO ESTA SERIALIZADO EL OBJETO $this->_directorio = $directorio; - $this->_armarArraySecciones($this->_obtenerConfSecciones()); - $this->_generarArchivo(); + $this->_armarArraySecciones($this->_obtenerConfSecciones()); + //Serializo el array asociativo de paginas-secciones + if (!file_exists(PRE_DIR.$directorio.POST_DIR.ARRAYSECCIONES_SERIALIZADO)) { + $this->_serializarArraySecciones(); + } +// $this->_generarArchivo(); NO ESTOY USANDO LA SERIALIZACION GRANDE AHORA // } } @@ -141,7 +138,7 @@ class Menu { function _generarArchivo() // ~X2C { $s = serialize($this); - $fp = fopen(PRE_DIR.$this->_directorio.POST_DIR,'w'); + $fp = fopen(PRE_DIR.$this->_directorio.POST_DIR.MENU_SERIALIZADO,'w'); fputs($fp, $s); fclose($fp); } @@ -159,7 +156,7 @@ class Menu { */ function _obtenerArchivo($directorio) // ~X2C { - $s = implode("", @file(PRE_DIR.$directorio.POST_DIR)); + $s = implode("", @file(PRE_DIR.$directorio.POST_DIR.MENU_SERIALIZADO)); return unserialize($s); } // -X2C @@ -205,17 +202,10 @@ class Menu { */ function _armarArraySecciones($confSec) // ~X2C { - $link_tmp = basename($_SERVER['PHP_SELF']); //Obtengo en link al cual se quiere acceder - $this->_secciones = array (); foreach ($confSec as $sec) { - $tmp = new Seccion ($sec, $link_tmp); + $tmp = new Seccion ($sec, $this->_directorio); array_push($this->_secciones,$tmp); - - if ($tmp->link() == $link_tmp) { - $this->_seccionSelect = $tmp; - } - } } // -X2C @@ -230,9 +220,11 @@ class Menu { */ function toHtmlSecciones() // ~X2C { + $link_tmp = basename($_SERVER['PHP_SELF']); + $row = array(); foreach ($this->_secciones as $sec) { - array_push($row,$sec->toHtml()); + array_push($row,$sec->toHtml($link_tmp)); } $TABLA = new HTML_Table('width="760" align="center" bgcolor="#CCCCCC" cellspacing="0"'); $TABLA->addRow($row,'align="center" bgcolor="#CCCCCC"'); @@ -240,24 +232,31 @@ class Menu { } // -X2C - - - - // +X2C Operation 114 + // +X2C Operation 126 /** - * Funcion que devuelve la seccion que se selecciono + * Funcion que se encarga de serializar el array asociativo paginas-secciones. Se utilizara en la clase seccion para identificar a que seccion pertenece la pagina a la cual se quiere acceder. * - * @return Seccion + * @return void * - * @access public + * @access private */ - function darSecSel() // ~X2C + function _serializarArraySecciones() // ~X2C { - return $this->_seccionSelect; + $tmp = array(); + foreach ($this->_secciones as $sec) { + $tmp[$sec->link()] = $sec->_darTitulo(); + foreach ($sec->_hijos as $hijo) { + $tmp[$h->_link] = $sec->_darTitulo(); + } + } + + $s = serialize($tmp); + $fp = fopen(PRE_DIR.$this->_directorio.POST_DIR.ARRAYSECCIONES_SERIALIZADO,'w'); + fputs($fp, $s); + fclose($fp); } // -X2C - } // -X2C Class :Menu -?> \ No newline at end of file +?> diff --git a/marco/php/marco/MenuHorizontal.php b/marco/php/marco/MenuHorizontal.php index 711a152..4db7ab0 100644 --- a/marco/php/marco/MenuHorizontal.php +++ b/marco/php/marco/MenuHorizontal.php @@ -68,10 +68,13 @@ class MenuHorizontal extends Menu { */ function MenuHorizontal($nombre, $link, $imagen) // ~X2C { - parent::Menu('prueba'); + parent::Menu(); + $this->_nombre = $nombre; + $this->_link = $link; + $this->_imagen = $imagen; } // -X2C } // -X2C Class :MenuHorizontal -?> +?> \ No newline at end of file diff --git a/marco/php/marco/Seccion.php b/marco/php/marco/Seccion.php index 567b442..2c4d06a 100644 --- a/marco/php/marco/Seccion.php +++ b/marco/php/marco/Seccion.php @@ -37,6 +37,7 @@ require_once 'Menu.php'; require_once 'MenuHorizontal.php'; require_once 'MenuVertical.php'; + // +X2C Class 16 :Seccion /** * Clase seccion para el manejo de las secciones @@ -81,13 +82,13 @@ class Seccion extends Pagina { var $_tipoMenu; /** - * 1 si la seccion esta seleccionada, 0 en caso contrario + * Lugar en donde esta el sistema. * - * @var int $select + * @var string $directorio * * @access private */ - var $_select; + var $_directorio; // ~X2C @@ -96,26 +97,21 @@ class Seccion extends Pagina { * Constructor. Recibe como parametro el nombre de la seccion * * @param array $seccion Array con la informacion de la seccion - * @param string $seccionSel Nombre de la seccion que esta seleccionada + * @param string $directorio Dir en donde esta el sistema * * @return void * * @access public * @static */ - function Seccion($seccion, $seccionSel) // ~X2C + function Seccion($seccion, $directorio) // ~X2C { $this->_nombre = $seccion['nombre']; $this->_imagen = new ImagenAnimada($seccion['imagenComun']); $this->_tipoMenu = $seccion['tipoMenu']; + $this->_directorio = $directorio; parent::Pagina($seccion['link']); $this->_cargarHijos($seccion['hijos']); - if ($seccionSel == $seccion['link']) { - $this->_select = 1; - } - else { - $this->_select = 0; - } } // -X2C @@ -123,17 +119,19 @@ class Seccion extends Pagina { /** * Funcion que devuelve un string con el html a imprimir por pantalla. * + * @param string $link_sel Indica la pagina a la cual se quiere acceder. + * * @return string * * @access public */ - function toHtml() // ~X2C + function toHtml($link_sel) // ~X2C { - if ($this->_select == 1) { - $tmp = "_link."\">_nombre."\" src=\"images/".$this->_imagen->_imgSelect."\" width=\"139\" height=\"54\" border=\"0\" alt=\"".$this->_imagen->_alt."\">"; + if ($this->_verifSeccionSeleccionada($link_sel)) { + $tmp = "_link."\">_nombre."\" src=\"images/".$this->_imagen->_imgSelect."\" border=\"0\" alt=\"".$this->_imagen->_alt."\">"; } else { - $tmp = "_link."\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_displayStatusMsg('".$this->_nombre."'); MM_swapImage('".$this->_nombre."','','images/".$this->_imagen->_imgMouseOn."',1); return document.MM_returnValue\" MM_swapImage('".$this->_nombre."','','images/".$this->_imagen->_imgMouseOn."',1)>_nombre."\" src=\"images/".$this->_imagen->_imgComun."\" width=\"139\" height=\"54\" border=\"0\" alt=\"".$this->_imagen->_alt."\">"; + $tmp = "_link."\" onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_displayStatusMsg('".$this->_nombre."'); MM_swapImage('".$this->_nombre."','','images/".$this->_imagen->_imgMouseOn."',1); return document.MM_returnValue\" MM_swapImage('".$this->_nombre."','','images/".$this->_imagen->_imgMouseOn."',1)>_nombre."\" src=\"images/".$this->_imagen->_imgComun."\" border=\"0\" alt=\"".$this->_imagen->_alt."\">"; } return $tmp; } @@ -153,7 +151,15 @@ class Seccion extends Pagina { { $this->_hijos = array (); foreach ($hijos as $hijo) { - $tmp = new MenuVertical ($hijo['nombre'],$hijo['link'], $hijo['imagenComun']); + if ($this->_tipoMenu == 'vertical') { + $tmp = new MenuVertical ($hijo['nombre'],$hijo['link'], $hijo['imagenComun']); + } + elseif ($this->_tipoMenu == 'Horizontal') { + $tmp = new MenuHorizontal ($hijo['nombre'],$hijo['link'], $hijo['imagenComun']); + } + else { + $tmp = new Menu (); + } array_push($this->_hijos, $tmp); } } @@ -214,10 +220,52 @@ class Seccion extends Pagina { */ function _darTitulo() // ~X2C { - return "{$this->_nombre} - {$this->_link}"; + return $this->_nombre; + } + // -X2C + + // +X2C Operation 127 + /** + * Funcion que se encarga de desserializar el array asociativo paginas-secciones. + * + * @return void + * + * @access private + */ + function _desSerializarArraySecciones() // ~X2C + { + $tmp = PRE_DIR.$this->_directorio.POST_DIR.ARRAYSECCIONES_SERIALIZADO; + $s = implode("", @file($tmp)); + return unserialize($s); + } + // -X2C + + // +X2C Operation 129 + /** + * Funcion que se encarga de verificar si la pagina a la cual se quiere acceder pertenece a la seccion que estoy dibujando. Se utiliza como agregado en toHtml. +Devuelve 1 si pertenece a la seccion, en caso contrario 0. + * + * @param string $link_sel Nombre de la pagina a la cual se quiere acceder. + * + * @return int + * + * @access private + */ + function _verifSeccionSeleccionada($link_sel) // ~X2C + { + $tmp = $this->_desSerializarArraySecciones(); + var_dump($tmp); + foreach ($tmp as $t) { +// echo $t[$link_sel].' == '.$this->_nombre .'
'; + if (isset($t) && $t[$link_sel] == $this->_nombre) { + $_SESSION['tipoMenu'] = $this->_tipoMenu; + return 1; + } + } + return 0; } // -X2C } // -X2C Class :Seccion -?> \ No newline at end of file +?> diff --git a/marco/test/prueba/conf/confSecciones.php b/marco/test/prueba/conf/confSecciones.php index 7e9acde..3ee0a95 100644 --- a/marco/test/prueba/conf/confSecciones.php +++ b/marco/test/prueba/conf/confSecciones.php @@ -43,7 +43,7 @@ // LAS UNICAS CLAVES OBLIGATORIAS SON NOMBRE, IMAGENCOMUN Y LINK array ( 'nombre' => 'Usuarios', //NOMBRE DE LA SECCION - 'imagenComun' => 'usuario', //IMAGEN COMUN + 'imagenComun' => 'usuarios', //IMAGEN COMUN 'imagenMouseOn' => '', // 'imagenSelect' => '', // 'link' => 'usuarios', //LINK DE LA SECCION @@ -63,7 +63,26 @@ ), ), ), - // }}} FIN SECCION 1 - ); + // }}} FIN SECCION 1 + // SECCION 2 {{{ + // LAS UNICAS CLAVES OBLIGATORIAS SON NOMBRE, IMAGENCOMUN Y LINK + array ( + 'nombre' => 'Perfiles', //NOMBRE DE LA SECCION + 'imagenComun' => 'perfiles', //IMAGEN COMUN + 'imagenMouseOn' => '', // + 'imagenSelect' => '', // + 'link' => 'perfiles', //LINK DE LA SECCION + 'tipoMenu' => 'vertical', //TIPO DEL MENU DE HIJOS (vertical, horizontal, oculto) + 'hijos' => array ( //HIJOS PARA EL MENU + array ( 'nombre' => 'Perfiles - Hijo', //NOMBRE DEL HIJO 1 + 'imagenComun' => 'perfiles-nionio', //IMAGEN COMUN + 'imagenMouseOn' => '', // + 'imagenSelect' => '', // + 'link' => 'perfiles-hijo', //LINK DEL HIJO + ), + ), + ), + // }}} FIN SECCION 2 + ); ?> diff --git a/marco/test/prueba/www/images/perfiles.gif b/marco/test/prueba/www/images/perfiles.gif new file mode 100644 index 0000000..f54dd87 Binary files /dev/null and b/marco/test/prueba/www/images/perfiles.gif differ diff --git a/marco/test/prueba/www/images/perfiles_f2.gif b/marco/test/prueba/www/images/perfiles_f2.gif new file mode 100644 index 0000000..8ed9706 Binary files /dev/null and b/marco/test/prueba/www/images/perfiles_f2.gif differ diff --git a/marco/test/prueba/www/images/perfiles_f3.gif b/marco/test/prueba/www/images/perfiles_f3.gif new file mode 100644 index 0000000..d2546dd Binary files /dev/null and b/marco/test/prueba/www/images/perfiles_f3.gif differ diff --git a/marco/test/prueba/www/images/usuarios-abm.gif b/marco/test/prueba/www/images/usuarios-abm.gif new file mode 100644 index 0000000..15e37eb Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-abm.gif differ diff --git a/marco/test/prueba/www/images/usuarios-abm_f2.gif b/marco/test/prueba/www/images/usuarios-abm_f2.gif new file mode 100644 index 0000000..59ea44d Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-abm_f2.gif differ diff --git a/marco/test/prueba/www/images/usuarios-abm_f3.gif b/marco/test/prueba/www/images/usuarios-abm_f3.gif new file mode 100644 index 0000000..79ecfd5 Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-abm_f3.gif differ diff --git a/marco/test/prueba/www/images/usuarios-filtrar.gif b/marco/test/prueba/www/images/usuarios-filtrar.gif new file mode 100644 index 0000000..b242e71 Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-filtrar.gif differ diff --git a/marco/test/prueba/www/images/usuarios-filtrar_f2.gif b/marco/test/prueba/www/images/usuarios-filtrar_f2.gif new file mode 100644 index 0000000..8d3780f Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-filtrar_f2.gif differ diff --git a/marco/test/prueba/www/images/usuarios-filtrar_f3.gif b/marco/test/prueba/www/images/usuarios-filtrar_f3.gif new file mode 100644 index 0000000..eb08d2e Binary files /dev/null and b/marco/test/prueba/www/images/usuarios-filtrar_f3.gif differ diff --git a/marco/test/prueba/www/images/usuarios.gif b/marco/test/prueba/www/images/usuarios.gif new file mode 100644 index 0000000..694d649 Binary files /dev/null and b/marco/test/prueba/www/images/usuarios.gif differ diff --git a/marco/test/prueba/www/images/usuarios_f2.gif b/marco/test/prueba/www/images/usuarios_f2.gif new file mode 100644 index 0000000..d7ebde3 Binary files /dev/null and b/marco/test/prueba/www/images/usuarios_f2.gif differ diff --git a/marco/test/prueba/www/images/usuarios_f3.gif b/marco/test/prueba/www/images/usuarios_f3.gif new file mode 100644 index 0000000..2ad68fb Binary files /dev/null and b/marco/test/prueba/www/images/usuarios_f3.gif differ diff --git a/marco/test/prueba/www/index.php b/marco/test/prueba/www/index.php index 094d1c9..e00f389 100644 --- a/marco/test/prueba/www/index.php +++ b/marco/test/prueba/www/index.php @@ -1,4 +1,5 @@ addBody(''); + $MARCO->addTitle('INDEX'); $MARCO->display(); ?> diff --git a/marco/test/prueba/www/perfiles.php b/marco/test/prueba/www/perfiles.php new file mode 100644 index 0000000..d80f521 --- /dev/null +++ b/marco/test/prueba/www/perfiles.php @@ -0,0 +1,7 @@ +addBody('A MI ME REBOTA Y A VOS TE EXPLOTA'); + $MARCO->addTitle('PERFILES PRUEBA'); + $MARCO->addBody('
Actitud Maria Marta
'); + $MARCO->display(); +?> + diff --git a/marco/test/prueba/www/usuarios-abm.php b/marco/test/prueba/www/usuarios-abm.php new file mode 100644 index 0000000..e0f1025 --- /dev/null +++ b/marco/test/prueba/www/usuarios-abm.php @@ -0,0 +1,5 @@ +addTitle('USUARIOS - ABM'); + $MARCO->addBody('
ESTO ES UNA PRUEBA PARA LOS HIJOS DE LAS SECCIONES
USUARIOS - ABM
'); + $MARCO->display(); +?> diff --git a/marco/test/prueba/www/usuarios-filtrar.php b/marco/test/prueba/www/usuarios-filtrar.php new file mode 100644 index 0000000..7601d5b --- /dev/null +++ b/marco/test/prueba/www/usuarios-filtrar.php @@ -0,0 +1,5 @@ +addTitle('USUARIOS - FILTRAR'); + $MARCO->addBody('
ESTO ES UNA PRUEBA PARA LOS HIJOS DE LAS SECCIONES
USUARIO - FILTRAR
'); + $MARCO->display(); +?> diff --git a/marco/test/prueba/www/usuarios.php b/marco/test/prueba/www/usuarios.php index 477ed4b..e4519a9 100644 --- a/marco/test/prueba/www/usuarios.php +++ b/marco/test/prueba/www/usuarios.php @@ -1,4 +1,8 @@ addBody('Y NO ES FELIZ, AUNQUE SONRIA'); + $MARCO->addTitle('USUARIOS - PRUEBA'); + $MARCO->addBody('
HIJO DE DESAPARECIDO - Actitud Maria Marta
'); + $MARCO->addBody('
USUARIOS-FILTRAR
'); + $MARCO->addBody('
USUARIOS-ABM
'); $MARCO->display(); ?>