RSS (souci SQL)

Messagepar utilisateur » Lun 20 Fév 2006, 00:07

j'ai ce script :
Code: Tout sélectionner
<?php
/*
  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 Pave Designs (http://www.pavedesigns.com)

  HISTORY:
  2005-03-03: v0.3: Modified by moku @ ghosthack.net
  2004-12-02: v0.2: Modified by Johnny Fischer (http://oscommercedevelopment.info)
  2003-09-11: v0.1: Created by Patrick Veverka

  Released under the GNU General Public License
*/
/* #####################################################################
2005-03-03 : moku

RSS doc:
  http://blogs.law.harvard.edu/tech/rss (en)
  http://www.stervinou.com/projets/rss/ (fr)

----- ENGLISH -----
Modified for:
- Show products' name in the language selected (rss.php?language=english);
- Show only MAX_DISPLAY_SEARCH_RESULTS items;
- Order by items id (last added, first listed);
- Do not show description field;
- Replace "&" by "&amp;";
- Removed $sqlcount SQL query (what was the use?);
- Add some RSS items;
- Add a stylesheet link to the W3C's one;

----- FRANÇAIS -----
Modifié pour :
- Affiche le nom des produits dans la langue choisie (rss.php?language=french) ;
- N'affiche que MAX_DISPLAY_SEARCH_RESULTS produits ;
- Range par numéro id (les derniers saisis en premier) ;
- N'affiche pas la description des produits ;
- Remplement des « & » par des « &amp; » ;
- Suppression de la requête $sqlcount qui ne sert vraissemblablement à rien ;
- Ajout de quelques balises RSS ;
- Ajout d'un lien vers le stylesheet du W3C ;

##################################################################### */

require('includes/application_top.php');

// If the default of your catalog is not what you want in your RSS feed, then
// please change this three constants:
//Enter an appropriate title for your website
define(RSS_TITLE, STORE_NAME);
//Enter your main shopping cart link
define(WEBLINK, HTTP_SERVER);
//Enter a description of your shopping cart
define(DESCRIPTION, TITLE);
/////////////////////////////////////////////////////////////
//That's it.  No More Editing (Unless you renamed DB tables or need to switch
//to SEO links (Apache Rewrite URL)
/////////////////////////////////////////////////////////////

$connection = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD)  or die("Couldn't make connection.");
// select database
$db = mysql_select_db(DB_DATABASE, $connection) or die(mysql_error());

// Si la langue n'est pas spécifiée, défaut sur l'anglais
if (is_null($HTTP_GET_VARS['language'])) {
  $language = "english";
} else {
  $language = tep_db_output($HTTP_GET_VARS['language']);
}
// Récupère le code (fr, en, etc.) et l'id (1, 2, etc.) de la langue courante
$lang_query = tep_db_query("select languages_id, code from " . TABLE_LANGUAGES . " where directory = '" . $language . "'");
if (tep_db_num_rows($lang_query)) {
  $lang_a = tep_db_fetch_array($lang_query);
    $lang_code = $lang_a['code'];
    $lang_id = $lang_a['languages_id'];
}

Header("Content-Type: text/xml");
echo '<?xml version="1.0" encoding="ISO-8859-1" ?>' . "n";
echo '<?xml-stylesheet href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css"?>' . "n";
echo "<!-- RSS for " . STORE_NAME . ", generated on " . date(r) . " -->n";
?>
<rss version="0.92">
<channel>
<title><?php echo RSS_TITLE; ?></title>
<link><?php echo WEBLINK;?></link>
<description><?php echo DESCRIPTION; ?></description>
<webMaster><?php echo STORE_OWNER_EMAIL_ADDRESS; ?></webMaster>
<language><?php echo $lang_code; ?></language>
<lastBuildDate><?php echo date(r); ?></lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<?php
// create SQL statement
$sql = "SELECT * FROM `products` ORDER BY 'products_id' DESC LIMIT " . MAX_DISPLAY_SEARCH_RESULTS;
// execute SQL query and get result
$sql_result = mysql_query($sql,$connection) or die("Couldn't execute query.");

// format results by row
while ($row = mysql_fetch_array($sql_result)) {
 $id = $row["products_id"];

  $link = HTTP_SERVER . DIR_WS_CATALOG;
    //uncomment this line out if you are using SEO links (Apache Rewrite URL)
  #$link .= "product_info.php/products_id/" . $id . "&amp;language=" . $lang_code;
  //comment out this line if you are NOT using SEO links
  $link .= "product_info.php?products_id=" . $id . "&amp;language=" . $lang_code;

 $model = $row["products_model"];
  $image = $row["products_image"];
  $price = $row["products_price"];
  $price = $currencies->format($price);

    $sql2 = "SELECT `products_name` FROM `products_description` WHERE products_id = '$id' AND language_id = '$lang_id' LIMIT 1";
    $sql2_result = mysql_query($sql2,$connection) or die("Couldn't execute query.");
    $row2 = mysql_fetch_array($sql2_result);
    $name = $row2["0"];

// add extra data here then add the xml tag below
  $products_url =  $row2["4"];

// add extra data here
  $name = ereg_replace ("&", "&#38;", $name);

?>
<item>
  <title><?php echo $name; ?></title>
  <link><?php echo $link; ?></link>
  <price><?php echo $price; ?></price>
</item>
<?php
}
// free resources and close connection
mysql_free_result($sql_result);
mysql_close($connection);
?>
</channel>
</rss>

je pense qu'il s'agit d'une bonne contribution (simple et compact, un seul fichier) pour créer un feed RSS
je pense aussi qu'elle est perfectible (ajout de pubdate par exemple pour chaque item, description et imagette ... pour les aggrégateurs et/ou la syndication)
mais là où je bloque c'est sur la syntaxe SQL qui ne semble pas correspondre avec osCSS, à partir de // create SQL statement, j'imagine que les tables ou leur structure ne sont pas identiques.

Je pense que le RSS est aussi une forme de contenu qui devrait être délivré d'origine par osCSS, en effet avec Firefox et ses marque-pages dynamiques, Opera (et l'aggrégateur incorporé) et le futur support du RSS par IE7, ce contenu ne peut plus être reconnu comme un gadget pour geek ;)
Et puis bon, je suis fan de RSS ...
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar j4k » Lun 20 Fév 2006, 01:34

oui c'est dans la TODO list
pour l'instant personne ne s'est penché sur le sujet, c'est bien si tu peux nous aiguiller sur une bonne contrib

Quel est le message d'erreur renvoyé?
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar utilisateur » Lun 20 Fév 2006, 03:25

Couldn't execute query.

Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="http://www.w3.org/2000/08/w3c-synd/style.css" type="text/css"?>
<!-- RSS for Boutique bla-bla, generated on Mon, 20 Feb 2006 01:24:58 +0100 -->
<rss version="0.92">
<channel>
<title>Boutique bla-bla</title>
<link>http://bla-bla.somewhere</link>
<description>Boutique bla-bla</description>
<webMaster>boutique@bla-bla.somewhere</webMaster>
<language>fr</language>
<lastBuildDate>Mon, 20 Feb 2006 01:24:58 +0100</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
Couldn't execute query.

bon sinon, faut que modifie le script pour que l'erreur soit plus explicite ;)

là où il y a des "bla-bla", c'est bon ...
Dernière édition par utilisateur le Lun 20 Fév 2006, 03:30, édité 1 fois.
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar utilisateur » Lun 20 Fév 2006, 03:44

utilisateur a écrit:bon sinon, faut que modifie le script pour que l'erreur soit plus explicite ;)

voilà :
Code: Tout sélectionner
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
Erreur SQL ! Resource id #41 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 'Resource id #41' at line 1

j'avais perdu les modifs destinées à expliciter les erreurs SQL,
à force de m'énerver avec ce script et mon FTP :D
Dernière édition par utilisateur le Lun 20 Fév 2006, 03:46, édité 1 fois.
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar j4k » Lun 20 Fév 2006, 12:31

Le souci vient en fait du nom des tables oscss, lorsqu'il y a un prefixe.

Pour rendre standard sur le nom de la table, il suffit de remplacer le nom de la table par la variable spécifiée dans includes/database_tables.php

ce qui donne :

Code: Tout sélectionner
// create SQL statement
$sql = "SELECT * FROM " . TABLE_PRODUCTS . " ORDER BY 'products_id' DESC LIMIT " . MAX_DISPLAY_SEARCH_RESULTS;

et plus bas :
Code: Tout sélectionner
$sql2 = "SELECT `products_name` FROM " . TABLE_PRODUCTS_DESCRIPTION . " WHERE products_id = '$id' AND language_id = '$lang_id' LIMIT 1";

Le script à l'air sympa, il faudrait effectivement le compléter et l'améliorer. (perso chez moi, j'ai mis dans la valeur d'affichage des euros de ma boutique : &nbsp;&euro; et ça lui plait pas :D)

et en vrac
- ajout du paramètre currencie pour afficher la monnaie que l'on souhaite
- gestion du MAX_DISPLAY_SEARCH_RESULTS dans un paramètre

Tiens nous au courant pour la suite
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar utilisateur » Lun 20 Fév 2006, 12:52

j4k a écrit:Le script à l'air sympa, il faudrait effectivement le compléter et l'améliorer. (perso chez moi, j'ai mis dans la valeur d'affichage des euros de ma boutique : &nbsp;&euro; et ça lui plait pas :D)

on va être un peu dans le même cas ...
sauf que chez moi, j'ai € entrè direct en encodage Windows, donc incompatible avec iso-8859-1, mais c'est un replace qui le change ensuite en &nbsp;&euro; sur l'ensemble de la boutique ...

peut être que j'aurais moins de mal ainsi ...

merci pour les explications et l'aide données pour le script.
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar utilisateur » Lun 20 Fév 2006, 13:18

y a aussi $sql3 àchanger ...
pourquoi on me l'a pas dit de suite !? :D

ce qui donne :
Code: Tout sélectionner
$sql3 = "SELECT `tax_rate` FROM " . TABLE_TAX_RATES . "  WHERE tax_class_id = '$tax' LIMIT 1";
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar j4k » Lun 20 Fév 2006, 13:31

on ne donne jamais la réponse en entier (il parait qu'il y a de l'espionnage industriel...chttt!)
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar j4k » Lun 20 Fév 2006, 13:34

en fait dans le script que tu as mis en haut du post, moi j'ai pas de $sql3 ! :D
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar utilisateur » Lun 20 Fév 2006, 23:00

j4k a écrit:en fait dans le script que tu as mis en haut du post, moi j'ai pas de $sql3 ! :D

ouais !!! :o
il est passé où ?
il manque un bout du script ou bien ?

bon sinon, ça avance ...
au fait sql3 il servait à récupérer le prix (mais je crois que c'était compréhensible)
je continue à développer (autant que je peux avec mes maigres compétences)
et je tiens au courant des avancées ou des écueils rencontrés ; ou les deux ;)

@+
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar j4k » Mar 21 Fév 2006, 00:05

au fait ya la contrib pour webmarchand qui marche bien, ça peut t'aider à prendre des idées

http://www.oscommerce-fr.info/forum/ind ... ebmarchand
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar utilisateur » Jeu 23 Fév 2006, 01:18

bon la contrib webmarchand ... j'ai pas compris à quoi ça servait, ni ce que c'était :???:

sinon, ça avance,
au passage, on évolue vers RSS 2.0 étendu du module Dublin Core
une petite prévisualisation (un peu "expurgée" : confidentialité)

Image

l'aggrégateur utilisé est RSSOwl

l'image est placée à gauche par du "style en dur" :
Code: Tout sélectionner
<img src="http://......./......./images/hewlett_packard/lj1100xi.gif" style="float: left; position: relative; margin: 0 0.25em 0 0; border: 0;" /><

en règle générale j'aime pas ce genre de choses, mais pour les aggrégateurs, c'est pas mal :P

sinon, je viens d'envoyer le validateur du W3C et le flux est parfaitement valide ... je pense encore implémenter quelques bricoles comme le prix par exemple et ça pourra bientôt le faire.

Le seul truc c'est que je manque cruellement de temps, les journées sont trop courtes :(
Dernière édition par utilisateur le Jeu 23 Fév 2006, 01:23, édité 1 fois.
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar j4k » Jeu 23 Fév 2006, 02:48

la contrib webmarchand sert à créer un fichier xml pour faire apparaître son catalogue dans le conparatif webmarchand et leguide.com et d'autes site du genre
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar utilisateur » Ven 24 Fév 2006, 02:55

tiens par contre comment je pourrais savoir si le produit est en promo ou pas ?
parce que je peux déterminer le prix ainsi :
Code: Tout sélectionner
$price = $row['products_price'];

puisque au début du script nous interrogeons la table TABLE_PRODUCTS avec le sélecteur *
ensuite on peut appliquer les éventuelles taxes :
Code: Tout sélectionner
  // Add VAt if product subject to VAT (might not be perfect if you have different VAT zones)
  $sql3 = "SELECT `tax_rate` FROM " . TABLE_TAX_RATES . "  WHERE tax_class_id = '$tax' LIMIT 1";
  $sql3_result = mysql_query($sql3,$connection) or die('Couldn't execute query.');
  $row3 = mysql_fetch_array($sql3_result);
  $tax = ($row3['tax_rate'] / 100)+1;
  $price = $price * $tax;
  $price = $currencies->format($price);

mais faudrait que le prix promotionnel puisse simplement être affiché à la place du prix "ordinaire" ...
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar stepibou » Ven 24 Fév 2006, 12:08

Salut,
tu peux regarder comment recuperer les prix dans les fichiers comme
includes/boxes/whats_new.php ou specials.php...

Une fois que ca fonctionne, ca serai bien de faire post recapitulatif du
how to, precisément les étapes.
Un préalable à l'etablisement d'une contrib dans le wiki....

voilou, bon code,

a+
;)
--> osCSS inside <--
stepibou
Membre très actif
 
Messages: 274
Inscription: Dim 30 Oct 2005, 02:15
Localisation: Lyon

Messagepar utilisateur » Ven 24 Fév 2006, 13:11

stepibou a écrit:Salut,
tu peux regarder comment recuperer les prix dans les fichiers comme
includes/boxes/whats_new.php ou specials.php...

j'ai un peu galéré, je pense être arrivé à un résultat satisfaisant, mais le code semble un peu lourd, cependant, par rapport aux scrip original, je n'ai pas augmenté le nombre de requêtes (du moins je crois), ce qui n'est déjà pas si mal.

Au fait personne ne me l'avait fait remarqué, mais sur le screenshot, y avait un souci dans la conversion du timestamp, donc les dates correspondaient à l'an 0 du web :lol:

stepibou a écrit:Une fois que ca fonctionne, ca serai bien de faire post recapitulatif du
how to, precisément les étapes.
Un préalable à l'etablisement d'une contrib dans le wiki....

un recapitulatif du how to ...
how to quoi ?
parce que si ça veut dire "quoi faire" ...
logiquement y aura rien à faire, uploader un fichier sur son FTP
et éventuellement changer une variable de langue :
Code: Tout sélectionner
define('PRODUCTS_PRICE', 'Prix du Produit');

que j'ai placée dans le script parce que je ne pense pas que je pouvais la récupérer autrement sinon ...

et aussi, éditer le fichier en lui même qui est commenté (voire très commenté) ;)

tiens au fait sur la première requête du script original :
Code: Tout sélectionner
// create SQL statement
$sql = "SELECT * FROM `products` ORDER BY 'products_id' DESC LIMIT " . MAX_DISPLAY_SEARCH_RESULTS;

il semble qu'ils navaient pas eu idée de ne récupérer que les "produits actifs" ...
c'est un peu dommage :P
c'est pourtant ps compliqué un petit : where products_status = '1'

voilà, je crois que ce sera tout pour aujourd'hui
utilisateur
Membre actif
 
Messages: 19
Inscription: Mer 08 Fév 2006, 14:21

Messagepar Phocea » Jeu 06 Avr 2006, 15:59

Heuu pour le fil RSS il faut à tout prix que ce soit un fichier qui output automatiquement le rss, ou est ce qu'un script qui crée un fichier rss a un endroit precis avec un nom precis ira aussi ?

Si c'est le cas j'ai un petit bout de code qui utilise les librairie DOM XML de php qui est super simple et super configurable que je peux partager.
Je m en sert pour balancer mon catalogue a plusieurs partenaires, avec un petit cron pour le remettre a jour periodiquement et basta
Phocea
Membre inactif
 
Messages: 2
Inscription: Jeu 06 Avr 2006, 15:56


Retourner vers Developpement

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron