lunes, 4 de agosto de 2008

Añadir / Quitar modulo o box a osCommerce

Añadir un nuevo modulo o box a osCommerce o quitarlo

Añadir nuevos modulos permite ampliar las funcionalidades del catalogo de osCommerce, en este tutorial indicaremos como hacer un nuevo modulo y que aparezca en la columna derecha o izquierda del catalogo de osCommerce, y que este modulo contenga enlaces a paginas adicionales, y que esos enlaces aparezcan en el idioma que se este visualizando el catalogo.

En este tutorial solo se explica como crear un nuevo modulo, en el tutorial de Creacion de Paginas Adicionales se explica como crear esas paginas a las cuales enlasaria este modulo.

Demo :

http://www.oscommerce-demo.com

 

Los modulos se pueden añadir o quitar de los archivos catalog/includes/column_rigth.php o bien catalog/includes/column_left.php

Añadir un modulo

Archivos que se trabajaran:

catalog/includes/boxes/information.php

catalog/includes/languages/espanol.php

catalog/includes/languages/espanol.php

catalog/includes/languages/espanol.php

catalog/includes/column_left.php o catalog/includes/column_right.php

Se crearan:

el nuevo modulo:

catalog/includes/boxes/nuevo_modulo.php

Para empezar un box o modulo debe estar contenido dentro de la etiquetas

<tr><td> y </td></tr>

 

<tr>

<td>

##CONTENIDO DEL MODULO AQUI##

</td>

</tr>

Creacion del modulo

Para realizar mejor un nuevo modulo es mejor basarse en modulos existentes.

 

1. Tomaremos como ejemplo el modulo de Informacion que contiene una lista de enlaces.

archivo catalog/includes/boxes/information.php

lo abrimos y vemos que su contenido es el siguiente:

<!-- information //-->

<tr>

<td>

<?php

$info_box_contents = array();

$info_box_contents[] = array('text' => BOX_HEADING_INFORMATION);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();

$info_box_contents[] = array('text' => '<a href="' . tep_href_link(FILENAME_SHIPPING) . '">' . BOX_INFORMATION_SHIPPING . '</a>

' .

'<a href="' . tep_href_link(FILENAME_PRIVACY) . '">' . BOX_INFORMATION_PRIVACY . '</a>

' .

'<a href="' . tep_href_link(FILENAME_CONDITIONS) . '">' . BOX_INFORMATION_CONDITIONS . '</a>

' .

'<a href="' . tep_href_link(FILENAME_CONTACT_US) . '">' . BOX_INFORMATION_CONTACT . '</a>');

new infoBox($info_box_contents);

?>

</td>

</tr>

<!-- information_eof //-->

2. Lo guardamos con el nombre del modulo que vayamos a realizar

Ejemplo:

nuevo_modulo.php

 

3. una vez guardado hacemos las modificaciones

nombres modulo:

<!-- information //--> por <!-- nuevo_modulo //-->

al final

<!-- information_eof //--> por <!-- nuevo_modulo_eof //-->

cabecera del modulo:

BOX_HEADING_INFORMATION por BOX_HEADING_NUEVO_MODULO

los nombres de los enlaces y las paginas a las que enlazan

FILENAME_SHIPPING por FILENAME_PAGINA01

y asi por cada enlace

los enlaces se componen de lo siguiente:

<a href="' . tep_href_link(FILENAME_SHIPPING) . '">' . BOX_INFORMATION_SHIPPING . '</a>

' .

FILENAME_SHIPPING es el nombre del archivo, este nombre luego en cada archivo de cada idioma se define para que enlace con el archivo del idioma que le corresponda

BOX_INFORMATION_SHIPPING es el nombre del enlace, igualmente en cada archivo de idioma se define una traduccion para cada uno segun el idioma con e lque el visitante este visualizando el catalogo

 

los primeros enlaces tienen ese formato terminado en

' .

el cierre del enlace y el salto de linea

el ultimo siempre tendra el siguiente formato terminado en ');

a diferencia de los otros no hay salto de linea y no termina en un punto sino en );

'<a href="' . tep_href_link(FILENAME_CONTACT_US) . '">' . BOX_INFORMATION_CONTACT . '</a>');

 

En el ejemplo seria:

el siguiente:

<!-- nuevo_modulo //-->

<tr>

<td>

<?php

$info_box_contents = array();

$info_box_contents[] = array('text' => BOX_HEADING_NUEVO_MODULO);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();

$info_box_contents[] = array('text' => '<a href="' . tep_href_link(FILENAME_PAGINA01) . '">' . BOX_NUEVO_MODULO_PAGINA01 . '</a>

' .

'<a href="' . tep_href_link(FILENAME_PAGINA02) . '">' . BOX_NUEVO_MODULO_PAGINA02 . '</a>

' .

'<a href="' . tep_href_link(FILENAME_PAGINA03) . '">' . BOX_NUEVO_MODULO_PAGINA03 . '</a>

' .

'<a href="' . tep_href_link(FILENAME_PAGINA04) . '">' . BOX_NUEVO_MODULO_PAGINA04 . '</a>');

new infoBox($info_box_contents);

?>

</td>

</tr>

<!-- nuevo_modulo_eof //-->

 

Definir el idioma de cada enlace

Ahora en cada archivo de cada idioma que tengamos disponible en el catalogo se debe definir el nombre de cada enlace, de la siguiente manera:

archivo:

catalog/includes/languages/espanol.php

4. buscamos lo siguiente aproximadamente por la linea 122:

// information box text in includes/boxes/information.php

define('BOX_HEADING_INFORMATION', 'Información');

define('BOX_INFORMATION_PRIVACY', 'Confidencialidad');

define('BOX_INFORMATION_CONDITIONS', 'Condiciones de uso');

define('BOX_INFORMATION_SHIPPING', 'Envios/Devoluciones');

define('BOX_INFORMATION_CONTACT', 'Contactenos');

Estas son las definiciones para el idioma español de la cabecera del modulo de informacion y de cada enlace, en los archivos catalog/includes/languages/english.php y catalog/includes/languages/german.php estan las definiciones para esos idiomas, si dispone de otros idiomas en su catalogo tendra que hacer este mismo paso para esos idiomas.

5. Copielo y pegelo al final, antes de la etiqueta final: ?>

En el ejemplo seria:

// nueva_pagina box text in includes/boxes/nueva_pagina.php

define('BOX_HEADING_NUEVO_MODULO', 'Nuevo Modulo');

define('BOX_NUEVO_MODULO_PAGINA01', 'Nueva Pagina 1');

define('BOX_NUEVO_MODULO_PAGINA02', 'Nueva Pagina 2');

define('BOX_NUEVO_MODULO_PAGINA03', 'Nueva Pagina 3');

define('BOX_NUEVO_MODULO_PAGINA04', 'Nueva Pagina 4');

se define asi para el idioma español el nombre de cada enlace y el titulo de la cabecera

para el idioma ingles

el archivo catalog/includes/languages/english.php:

// nueva_pagina box text in includes/boxes/nueva_pagina.php

define('BOX_HEADING_NUEVO_MODULO', 'New Box);

define('BOX_NUEVO_MODULO_PAGINA01', 'New Box 1');

define('BOX_NUEVO_MODULO_PAGINA02', 'New Box 2');

define('BOX_NUEVO_MODULO_PAGINA03', 'New Box 3');

define('BOX_NUEVO_MODULO_PAGINA04', 'New Box 4');

para el idioma aleman

catalog/includes/languages/german.php:

// nueva_pagina box text in includes/boxes/nueva_pagina.php

define('BOX_HEADING_NUEVO_MODULO', 'Neue Module');

define('BOX_NUEVO_MODULO_PAGINA01', 'Neue Module 1');

define('BOX_NUEVO_MODULO_PAGINA02', 'Neue Module 2');

define('BOX_NUEVO_MODULO_PAGINA03', 'Neue Module 3');

define('BOX_NUEVO_MODULO_PAGINA04', 'Neue Module 4');

 

Insercion del nuevo modulo en la columna derecha o izquierda

6. Ahora abrimos el archivo que corresponda a la columna donde queramos que aparezca el modulo, columna derecha: column_right.php, columna izquierda: column_left.php

Ejemplo, abrimos el archivo de la columna izquierda,

catalog/includes/column_left.php

vemos al final del archivo que aparece lo siguiente:

require(DIR_WS_BOXES . 'whats_new.php');

require(DIR_WS_BOXES . 'search.php');

require(DIR_WS_BOXES . 'information.php');

?>

la primera de esas lineas corresponde a el modulo que muestra un producto nuevo, la segunda al modulo de busqueda y la ultima al de informacion

si añadimos despues del de informacion el modulo que hemos,

en el ejemplo se llama nuevo_modulo.php,

la linea a insertar es la siguiente:

require(DIR_WS_BOXES . 'nuevo_modulo.php');

seria asi:

require(DIR_WS_BOXES . 'whats_new.php');

require(DIR_WS_BOXES . 'search.php');

require(DIR_WS_BOXES . 'information.php');

require(DIR_WS_BOXES . 'nuevo_modulo.php');

?>

Ahora comprobamos el catalogo y debe aparecer el nuevo modulo, en cada idioma debe aparecer con la cabecera y enlaces en sus idiomas

 

Lo siguiente es crear una pagina nueva con informacion nueva, similar a las paginas de informacion, contacto e informacion de envio y pagos. Esto se detalla en el tutorial de creacion de pagina adicionales.

Quitar un modulo de alguna de las columnas del catalogo de osCommerce

Los modulos que se muestran en la columna derecha se borran del archivo:

catalog/includes/column_right.php

los modulos de la columna izquierda se borran del archivo:

catalog/includes/column_left.php

Modulos de la Columna derecha:

catalog/includes/column_right.php

<?php

/*

$Id: column_right.php,v 1.17 2003/06/09 22:06:41 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License

*/

require(DIR_WS_BOXES . 'shopping_cart.php');

if (isset($HTTP_GET_VARS['products_id'])) include(DIR_WS_BOXES . 'manufacturer_info.php');

if (tep_session_is_registered('customer_id')) include(DIR_WS_BOXES . 'order_history.php');

if (isset($HTTP_GET_VARS['products_id'])) {

if (tep_session_is_registered('customer_id')) {

$check_query = tep_db_query("select count(*) as count from " . TABLE_CUSTOMERS_INFO . " where customers_info_id = '" . (int)$customer_id . "' and global_product_notifications = '1'");

$check = tep_db_fetch_array($check_query);

if ($check['count'] > 0) {

include(DIR_WS_BOXES . 'best_sellers.php');

} else {

include(DIR_WS_BOXES . 'product_notifications.php');

}

} else {

include(DIR_WS_BOXES . 'product_notifications.php');

}

} else {

include(DIR_WS_BOXES . 'best_sellers.php');

}

if (isset($HTTP_GET_VARS['products_id'])) {

if (basename($PHP_SELF) != FILENAME_TELL_A_FRIEND) include(DIR_WS_BOXES . 'tell_a_friend.php');

} else {

include(DIR_WS_BOXES . 'specials.php');

}

require(DIR_WS_BOXES . 'reviews.php');

if (substr(basename($PHP_SELF), 0, 8) != 'checkout') {

include(DIR_WS_BOXES . 'languages.php');

include(DIR_WS_BOXES . 'currencies.php');

}

?>

Si quicieramos quitar el modulo de los idiomas del catalogo deberiamos comentar la linea que inserta el modulo en la columna o bien borrarla, la linea de codigo que inserta el modulo de idiomas es la siguiente que se encuentra cerca del final:

include(DIR_WS_BOXES . 'languages.php');

para que no aparezca la comentariamos añadiendo dos barras '//' al comienzo de la linea y quedaria asi:

} else {

include(DIR_WS_BOXES . 'specials.php');

}

require(DIR_WS_BOXES . 'reviews.php');

if (substr(basename($PHP_SELF), 0, 8) != 'checkout') {

// include(DIR_WS_BOXES . 'languages.php');

include(DIR_WS_BOXES . 'currencies.php');

}

?>

de este modo no aparecera el modulo de idiomas.

Para todos los demas seria hacer lo mismo

Si queremos que vuelva a aparecer deberemos descomentar esa linea borrando esas dos barras //

para quitar el modulo de las monedas seria comentar la linea:

include(DIR_WS_BOXES . 'currencies.php');

para quitar el carrito de compra comentar la linea

require(DIR_WS_BOXES . 'shopping_cart.php');

para quitar el modulo que muestra una oferta comentar la linea:

include(DIR_WS_BOXES . 'specials.php');

Modulos de la Columna izquierda:

catalog/includes/column_left.php

<?php

/*

$Id: column_left.php,v 1.15 2003/07/01 14:34:54 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License

*/

if ((USE_CACHE == 'true') && empty($SID)) {

echo tep_cache_categories_box();

} else {

include(DIR_WS_BOXES . 'categories.php');

}

if ((USE_CACHE == 'true') && empty($SID)) {

echo tep_cache_manufacturers_box();

} else {

include(DIR_WS_BOXES . 'manufacturers.php');

}

require(DIR_WS_BOXES . 'whats_new.php');

require(DIR_WS_BOXES . 'search.php');

require(DIR_WS_BOXES . 'information.php');

?>

Para quitar el modulo que muestra un producto nuevo seria comentar la linea:

require(DIR_WS_BOXES . 'whats_new.php');

para quitar el modulo que muestra la caja de busqueda comentar la linea:

require(DIR_WS_BOXES . 'search.php');

Para quitar el modulo de informacion comentar la linea:

require(DIR_WS_BOXES . 'information.php');

Para quitar el desplegable de los fabricantes comentar la siguiente parte del codigo:

if ((USE_CACHE == 'true') && empty($SID)) {

echo tep_cache_manufacturers_box();

} else {

include(DIR_WS_BOXES . 'manufacturers.php');

}

igualmente se haria comentando esa parte del codigo añadiendo delante de cada linea las dos barras

// if ((USE_CACHE == 'true') && empty($SID)) {

// echo tep_cache_manufacturers_box();

// } else {

// include(DIR_WS_BOXES . 'manufacturers.php');

// }

* Tambien se pueden mover los modulos de una columna a otra, o bien subir o bajar un modulo de posicion dentro de una misma columna. colocando la linea que inserta el modulo en la posicion que corresponda.