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.