Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] Autores para osCommerce 2.3.1


AdrianOsc

Recommended Posts

Este módulo esta pensado a partir de "manufacturers2" desarrllado para la

versión 2.2.

Para quienes usamos osCommerce como plataforma para una Librería online, nos

encontramos con la necesidad de contar con "dos fabricantes": Editor y Autor.

Si bien el módulo Extra Product Fields (EPF), nos da la posibilidad de colocar

al autor dentro de su estructura, resulta más útil que el comprador cuente con

una opción de similares caracteristicas para los Autores.

 

El concepto es básico, partiendo de una instalación 2.3.1 he duplicado todo

lo referente a manufacturers.

 

La descarga se puede hacer desde aquí -> http://addons.oscommerce.com/info/7851

 

Preguntas y dudas... tratare de responder todo lo que pueda

 

Saludos, Adrián.-

Link to comment
Share on other sites

Primero de todo muchas gracías por la contribución!!!

 

Estoy intentando actualizar mi base de datos pero tengo un error de mysql!!

 

Crear las 2 nuevas tablas de autores no da ningún problema desde el phpmyadmin , pero cuando añadimos el autores_id a procucts me da este error!!

 

Error
consulta SQL: 

ALTER TABLE `products` ADD `autores_id` int NULL INSERT INTO configuration( configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added ) 
VALUES (

'Lista de los Autores', 'MAX_DISPLAY_AUTORES_IN_A_LIST', '0', 'Usado en el recuadro de los autores; cuando el número de autores sobrepasa este número, un número será mostrado sustituyendo a la lista por defecto.', '3', '7', now( ) 
);



MySQL ha dicho:  

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO configuration (configuration_title, configuration_key, configuration' at line 3 

Link to comment
Share on other sites

Primero que nada gracias...

 

Respecto a tu consulta, si te fijas en el código que has pegado el mismo presenta un error. En la misma línea tienes el ALTER TABLE... y el INSERT INTO..., eso se debe a que he omitido poner un "punto y coma" detras del NULL del ALTER TABLE. :blush:

 

Error
consulta SQL: 

ALTER TABLE `products` ADD `autores_id` int NULL INSERT INTO configuration( configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added ) 
VALUES (

'Lista de los Autores', 'MAX_DISPLAY_AUTORES_IN_A_LIST', '0', 'Usado en el recuadro de los autores; cuando el número de autores sobrepasa este número, un número será mostrado sustituyendo a la lista por defecto.', '3', '7', now( ) 
);

MySQL ha dicho:  

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO configuration (configuration_title, configuration_key, configuration' at line 3 

 

Copio el código como lo puse en el zip original y al cual le agrego el ";" final despues del NULL:

 

CREATE TABLE autores (
 autores_id int NOT NULL auto_increment,
 autores_name varchar(32) NOT NULL,
 autores_image varchar(64),
 date_added datetime NULL,
 last_modified datetime NULL,
 PRIMARY KEY (autores_id),
 KEY IDX_AUTORES_NAME (autores_name)
);

CREATE TABLE autores_info (
 autores_id int NOT NULL,
 languages_id int NOT NULL,
 autores_url varchar(255) NOT NULL,
 url_clicked int(5) NOT NULL default '0',
 date_last_click datetime NULL,
 PRIMARY KEY (autores_id, languages_id)
);

ALTER TABLE `products` ADD `autores_id` int NULL;

INSERT INTO configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) VALUES ('Lista de los Autores', 'MAX_DISPLAY_AUTORES_IN_A_LIST', '0', 'Usado en el recuadro de los autores; cuando el número de autores sobrepasa este número, un número será mostrado sustituyendo a la lista por defecto.', '3', '7', now());
INSERT INTO configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) VALUES ('Tamaño de la lista de los Autores', 'MAX_AUTORES_LIST', '1', 'Utilizado en el recuadro de los autores; cuando este valor es "1" lista drop down será usada en el cuadro de los autores. Si no, una lista check box mostrará el número de filas.', '3', '7', now());
INSERT INTO configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) VALUES ('Longitud del nombre de los Autores', 'MAX_DISPLAY_AUTORES_NAME_LEN', '15', 'Utilizado en el recuadro de los autores; longitud máxima permitida del nombre de los autores.', '3', '8', now());

 

Saludos Adrián.-

Link to comment
Share on other sites

Gracias por la rapidez Adrián.

 

Mañana lo pruebo y te comento, ahora he abierto el zip que baje de contributions oscommerce y sale sin ; detrás del NULL!!!

 

Seguro que la contibución que subiste era el zip correcto??? Yo lo baje hará quiza un par de días....

 

La versión que yo tengo es:

 

autores_osc231_v10

 

Saludos

Edited by arcadia128
Link to comment
Share on other sites

Creo que no logre expresarme correctamente....

 

Dije que había un error y mostre cual era el cambio a realizar. No lo había realizado en el zip.

 

Desde ahora si puedes bajar una versión 1.1, donde realice el cambio.

 

Saludos, Adrián.-

Link to comment
Share on other sites

Esimado Ivan

 

Estimo que sería complicado. Hay que tener en cuenta que serían dos cosas (básicas) a realizar.

 

1. En el select de autores, habría que habilitar la opción de poder marcar más de uno. Esto es sencillo.

 

2. Habría que modificar tablas o crear una para relacionar varios autores con un libro. Tambien sencillo.

 

pero...

Me temo que meter la mano en el código para la recuperación de los datos (los query y su presentación) será algo que me temo muy complicado.

 

Yo he solucionado, los poquisimos casos de más de un autor, poniendolos como uno solo:

Ej.:

Libro Tal - Autores: Fulano y Mengano

Libro Cual - Autor: Fulano

Libro Aquel - Autor: Zutano.

Libro Otro - Autor: Perengano

Libro Este - Autor: Perengano y Fulano

 

Select de Autores

Fulano

Fulano y Mengano

Perengano

Perengano y Fulano

Zutano

 

En mi caso tengo unos 150 autores, de los cuales 7 son dos autores para el mismo libro y de los 7 sólo un par además escribió un libro por su cuenta.

 

Saludos, Adrián.-

Link to comment
Share on other sites

Esimado Ivan

 

 

Estimo que sería complicado. Hay que tener en cuenta que serían dos cosas (básicas) a realizar.

 

1. En el select de autores, habría que habilitar la opción de poder marcar más de uno. Esto es sencillo.

 

2. Habría que modificar tablas o crear una para relacionar varios autores con un libro. Tambien sencillo.

 

pero...

Me temo que meter la mano en el código para la recuperación de los datos (los query y su presentación) será algo que me temo muy complicado.

 

Yo he solucionado, los poquisimos casos de más de un autor, poniendolos como uno solo:

Ej.:

Libro Tal - Autores: Fulano y Mengano

Libro Cual - Autor: Fulano

Libro Aquel - Autor: Zutano.

Libro Otro - Autor: Perengano

Libro Este - Autor: Perengano y Fulano

 

Select de Autores

Fulano

Fulano y Mengano

Perengano

Perengano y Fulano

Zutano

 

En mi caso tengo unos 150 autores, de los cuales 7 son dos autores para el mismo libro y de los 7 sólo un par además escribió un libro por su cuenta.

 

Saludos, Adrián.-

 

Buenos días adrián!!

 

No me parece mal la idea que me comentas de poner varios autores como un solo autor!!!

 

El inconveniente es que marco una url a cada autor porque cada uno tiene una ficha personal.

 

Seguiré pensando alguna solución......

 

Gracias de nuevo!!!!

Link to comment
Share on other sites

Buenos días adrián!!

 

No me parece mal la idea que me comentas de poner varios autores como un solo autor!!!

 

El inconveniente es que marco una url a cada autor porque cada uno tiene una ficha personal.

 

Seguiré pensando alguna solución......

 

Gracias de nuevo!!!!

 

Buensa...

 

Tienes dos casos... ok?

 

Libro <-> Autor

Libro <-> AutoreS

 

Para cada autor -> Ficha

...

Entonces... chan chan!

Autores -> Ficha de ambos o los que sean.

 

Posiblemente tendrás que duplicar algunas fichas.

Ficha Fulano

Ficha Mengano

Ficha Fulano y Mengano

Etc.

 

Saludos, Adrián.-

Link to comment
Share on other sites

Pues ya probaré el sistema y te cuento, ando con el diseño de la web, cuando empieze a subir las fichas de los libros veré mejor como aplicar varios autores!!!

 

Para la semana que viene ya habré acabado la tienda!!!

 

Ahora ando con el sistema de ebooks, ya tengo instalado la contribución pero pensando cuál es la mejor forma de proteger el PDF.

 

Colocaré contraseñas en los pdf y rars, pero poco mas se puede hacer veo...

 

Trabajas con ebooks en tu tienda???

 

Y gracias de nuevo!!!

Link to comment
Share on other sites

Estimado Ivan

 

Si bien nos vamos un poco de tema, te comento.

 

Los PDF que subo sólo van con contraseña para que no los editen, otra cosa es perdida de tiempo.

 

Trabajo con eBooks. Yo uso para la elaboración de los mismos NeoBook. La instlación se hace con Nsis.

Con eso me manejo bien para crear claves de habilitación para un equipo y la copia del eBook se hace bastante complicada.

 

Saludos, Adrián

Link to comment
Share on other sites

Estimado Ivan

 

Si bien nos vamos un poco de tema, te comento.

 

Los PDF que subo sólo van con contraseña para que no los editen, otra cosa es perdida de tiempo.

 

Trabajo con eBooks. Yo uso para la elaboración de los mismos NeoBook. La instlación se hace con Nsis.

Con eso me manejo bien para crear claves de habilitación para un equipo y la copia del eBook se hace bastante complicada.

 

Saludos, Adrián

 

Buenas tardes adrian!!

 

Si que me desvío, pero como conozco poca gente del foro oscommerce que también diseñe o edite el oscommerce para funcionar como libreria no quería dejar la oportunidad de preguntartelo!!

 

Ya miraré el software que comentas , solo he mirado por encima el Epub y no me convenció.

 

Gracias de nuevo!!

Link to comment
Share on other sites

  • 2 weeks later...

Hola, Adrían, muchas gracias por la contribución!

Estoy adaptando un oscommerce para una librería y se me había ocurrido tu misma idea de doblar las tablas de manufacturer para el autor cuando encontre tu contribución.

Está muy clara y me funcionó fenomenal, sin ningún problema.

 

También me surgió el problema de los libros con varios autores y lo que he hecho es doblar tu "autores" poniendo "autores2", "autores3" y "autores4" (me han dicho que con cuatro basta, si hay más se ponen "varios"). Os pongo el código por si os sirve, aunque a lo mejor es un poco chapucero porque soy novato en esto:

 

- He repetido el campo "autores_id" en la tabla "products" añadiendo 2,3 y 4:

ALTER TABLE `products` ADD `autores2_id` int NULL;

 

- He añadido los autores 2, 3 y 4 en la página "categories.php" en admin:

En la lineas 241:

# <!-- MOD-Autores INI -->
       $sql_data_array = array('products_quantity' => (int)tep_db_prepare_input($HTTP_POST_VARS['products_quantity']),
                               'products_model' => tep_db_prepare_input($HTTP_POST_VARS['products_model']),
                               'products_price' => tep_db_prepare_input($HTTP_POST_VARS['products_price']),
                               'products_date_available' => $products_date_available,
                               'products_weight' => (float)tep_db_prepare_input($HTTP_POST_VARS['products_weight']),
                               'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']),
                               'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']),
                               'manufacturers_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id']),
                               'autores_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['autores_id']),
							'autores2_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['autores2_id']),
							'autores3_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['autores3_id']),
							'autores4_id' => (int)tep_db_prepare_input($HTTP_POST_VARS['autores4_id']));
# <!-- MOD-Autores FIN -->

 

Sobre la linea 390:

# <!-- MOD-Autores INI -->
           $product_query = tep_db_query("select products_quantity, products_model, products_image, products_price, products_date_available, products_weight, products_tax_class_id, manufacturers_id, autores_id, autores2_id, autores3_id, autores4_id from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
# <!-- MOD-Autores FIN -->

 

Linea 395:

# <!-- MOD-Autores INI -->
           tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id, autores_id, autores2_id, autores3_id, autores4_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "',  now(), " . (empty($product['products_date_available']) ? "null" : "'" . tep_db_input($product['products_date_available']) . "'") . ", '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "', '"  . (int)$product['autores_id'] . "', '"  . (int)$product['autores2_id'] . "', '" . (int)$product['autores3_id'] . "', '" . (int)$product['autores4_id'] . "')");
# <!-- MOD-Autores FIN -->

 

Linea 437:

# <!-- MOD-Autores INI -->
   $parameters = array('products_name' => '',
                      'products_description' => '',
                      'products_url' => '',
                      'products_id' => '',
                      'products_quantity' => '',
                      'products_model' => '',
                      'products_image' => '',
                      'products_larger_images' => array(),
                      'products_price' => '',
                      'products_weight' => '',
                      'products_date_added' => '',
                      'products_last_modified' => '',
                      'products_date_available' => '',
                      'products_status' => '',
                      'products_tax_class_id' => '',
                      'manufacturers_id' => '',
                      'autores_id' => '',
	    		   'autores2_id' => '',
	    		   'autores3_id' => '',
	    		   'autores4_id' => '');
# <!-- MOD-Autores FIN -->

 

Linea 464:

# <!-- MOD-Autores INI -->
     $product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_head_title_tag, pd.products_head_desc_tag, pd.products_head_keywords_tag, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id, p.autores_id, p.autores2_id, p.autores3_id, p.autores4_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");
# <!-- MOD-Autores FIN -->

 

Linea 489:

# <!-- MOD-Autores INI -->
   $autores_array = array(array('id' => '', 'text' => TEXT_NONE));
   $autores_query = tep_db_query("select autores_id, autores_name from " . TABLE_AUTORES . " order by autores_name");
   while ($autores = tep_db_fetch_array($autores_query)) {
     $autores_array[] = array('id' => $autores['autores_id'],
                              'text' => $autores['autores_name']);
   }

$autores2_array = array(array('id' => '', 'text' => TEXT_NONE));
   $autores2_query = tep_db_query("select autores_id, autores_name from " . TABLE_AUTORES . " order by autores_name");
   while ($autores2 = tep_db_fetch_array($autores2_query)) {
     $autores2_array[] = array('id' => $autores2['autores_id'],
                              'text' => $autores2['autores_name']);
   }

$autores3_array = array(array('id' => '', 'text' => TEXT_NONE));
   $autores3_query = tep_db_query("select autores_id, autores_name from " . TABLE_AUTORES . " order by autores_name");
   while ($autores3 = tep_db_fetch_array($autores3_query)) {
     $autores3_array[] = array('id' => $autores3['autores_id'],
                              'text' => $autores3['autores_name']);
}

$autores4_array = array(array('id' => '', 'text' => TEXT_NONE));
   $autores4_query = tep_db_query("select autores_id, autores_name from " . TABLE_AUTORES . " order by autores_name");
   while ($autores4 = tep_db_fetch_array($autores4_query)) {
     $autores4_array[] = array('id' => $autores4['autores_id'],
                              'text' => $autores4['autores_name']);
}
# <!-- MOD-Autores FIN -->

 

Linea 619:

<!-- MOD-Autores INI -->
          <tr>
           <td class="main"><?php echo TEXT_PRODUCTS_AUTORES; ?></td>
           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('autores_id', $autores_array, $pInfo->autores_id); ?></td>
         </tr>
         <tr>
           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
         </tr>
         <tr>
           <td class="main"><small><?php echo TEXT_PRODUCTS_AUTORES2; ?></small></td>
           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('autores2_id', $autores2_array, $pInfo->autores2_id); ?></td>
         </tr>
         <tr>
           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
         </tr>
         <tr>
           <td class="main"><small><?php echo TEXT_PRODUCTS_AUTORES3; ?></small></td>
           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('autores3_id', $autores3_array, $pInfo->autores3_id); ?></td>
         </tr>
         <tr>
           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
         </tr>
         <tr>
           <td class="main"><small><?php echo TEXT_PRODUCTS_AUTORES4; ?></small></td>
           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('autores4_id', $autores4_array, $pInfo->autores4_id); ?></td>
         </tr>
         <tr>
           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
         </tr>
<!-- MOD-Autores FIN -->

 

Linea 911:

# <!-- MOD-Autores INI -->
     $product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_head_title_tag, pd.products_head_desc_tag, pd.products_head_keywords_tag, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id, p.autores_id, p.autores2_id, p.autores3_id, p.autores4_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'");
# <!-- MOD-Autores FIN -->

 

- En la página "producto_info" del catalogo:

En la linea 37:

	#<!-- MOD-Autores INI-->
   $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id, p.autores_id, p.autores2_id, m.autores_id, m.autores_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_AUTORES . " m where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and p.autores_id = m.autores_id and pd.language_id = '" . (int)$languages_id . "'");
   $product_info = tep_db_fetch_array($product_info_query);
#<!-- MOD-Autores FIN-->

 

y a continuación le añado:

	#<!-- MOD-Autores 2,3 y 4 INI -->
if (tep_not_null($product_info['autores2_id'])) {
	$product_info_autores2_query = tep_db_query("select p.products_id, p.autores2_id, p.autores3_id, m.autores_id, m.autores_name from " . TABLE_PRODUCTS . " p, " . TABLE_AUTORES . " m where p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and p.autores2_id = m.autores_id");
   $product_info_autores2 = tep_db_fetch_array($product_info_autores2_query);
}

if (tep_not_null($product_info_autores2['autores3_id'])) {
	$product_info_autores3_query = tep_db_query("select p.products_id, p.autores3_id, p.autores4_id, m.autores_id, m.autores_name from " . TABLE_PRODUCTS . " p, " . TABLE_AUTORES . " m where p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and p.autores3_id = m.autores_id");
   $product_info_autores3 = tep_db_fetch_array($product_info_autores3_query);
}

if (tep_not_null($product_info_autores3['autores4_id'])) {
	$product_info_autores4_query = tep_db_query("select p.products_id, p.autores4_id, m.autores_id, m.autores_name from " . TABLE_PRODUCTS . " p, " . TABLE_AUTORES . " m where p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and p.autores4_id = m.autores_id");
   $product_info_autores4 = tep_db_fetch_array($product_info_autores4_query);
}
#<!-- MOD-Autores 2,3 y 4 FIN -->

 

Sobre la linea 66:

	#<!-- MOD-Autores INI--> 
   if (tep_not_null($product_info['autores_name'])) {
$products_name = $product_info['products_name'] . '<br />' . $product_info['autores_name'];
#<!-- MOD-Autores 2,3 y 4 INI -->
if (tep_not_null($product_info_autores2['autores_name'])) {
$products_name .='<br />' . $product_info_autores2['autores_name'];
}
if (tep_not_null($product_info_autores3['autores_name'])) {
$products_name .='<br />' . $product_info_autores3['autores_name'];
echo "pepe";
}
if (tep_not_null($product_info_autores4['autores_name'])) {
$products_name .='<br />' . $product_info_autores4['autores_name'];
}

#<!-- MOD-Autores 2,3 y 4 FIN -->
}else {
$products_name = $product_info['products_name'] . '<br />';
}
if (!empty($product_info['products_model'])) {
$products_name .='<br /><span class="smallText">ISBN: ' . $product_info['products_model'] . '</span>';
   } 
#<!-- MOD-Autores FIN-->

 

A lo mejor es un poco chapuza la solución pero a mi me funciona.

Todavía me faltan muchas cosas: las busquedas o que salgan las fichas de todos los autores, a ver si me pongo.

 

Lo dicho, muchas gracias y un saludo.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...