AdrianOsc Posted February 19, 2011 Share Posted February 19, 2011 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.- Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted February 23, 2011 Share Posted February 23, 2011 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 Quote Link to comment Share on other sites More sharing options...
AdrianOsc Posted February 23, 2011 Author Share Posted February 23, 2011 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.- Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted February 23, 2011 Share Posted February 23, 2011 (edited) 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 February 23, 2011 by arcadia128 Quote Link to comment Share on other sites More sharing options...
AdrianOsc Posted February 24, 2011 Author Share Posted February 24, 2011 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.- Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted March 1, 2011 Share Posted March 1, 2011 Gracias ya lo instalé y funciona perfectamente!!! :thumbsup: Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted March 1, 2011 Share Posted March 1, 2011 Una pregunta que se me ocurre?? Si un libro tiene varios autores sería muy complicado clonar tu contribución para tener otros autores relacionados con un mismo libro??? Gracias Quote Link to comment Share on other sites More sharing options...
AdrianOsc Posted March 1, 2011 Author Share Posted March 1, 2011 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.- Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted March 2, 2011 Share Posted March 2, 2011 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!!!! Quote Link to comment Share on other sites More sharing options...
AdrianOsc Posted March 2, 2011 Author Share Posted March 2, 2011 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.- Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted March 9, 2011 Share Posted March 9, 2011 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!!! Quote Link to comment Share on other sites More sharing options...
AdrianOsc Posted March 9, 2011 Author Share Posted March 9, 2011 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 Quote Link to comment Share on other sites More sharing options...
arcadia128 Posted March 12, 2011 Share Posted March 12, 2011 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!! Quote Link to comment Share on other sites More sharing options...
miayuji Posted March 26, 2011 Share Posted March 26, 2011 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.