Aide - Recherche - Membres - Calendrier
Version complète : Utilisation de Ajax
Forum osCommerce-fr > Adapter OsCommerce MS2 > Echanges développeurs
mosaic
Je me demandais l'intérêt que vous voyez à utiliser Ajax pour la gestion de votre panier et aussi pour l'admin

( du genre déplacer un produit dans la liste des produits à découvrir, etc...
ajouter facilement au panier, etc... )

Pensez-vous que l'utilisateur lambda ( nos clients ) soit en mesure d'apprécier l'apport de cette interactivité dans son panier.

Non, il ne s'agissait pas de corvée de lessive blush.gif
mosaic
Faîtes un tour sur ce site pour découvrir quelques petits scripts sympathiques

http://openrico.org/

Je me pose beaucoup de questions quant à l'interactivité et je pense que celà peut être un moyen de rendre plus attractif l'admin par exemple

Dotclear en est déjà doté blush.gif
Gyakutsuki
Cette technologie intéresse beaucoup de monde, HPDl est à la recherche d'une personne maitrisant ce langage. Il y a des choses très intéressantes mais je trouve cette techno est un peu jeune. A suivre et à étudier.
manmachine
Ce language est a voir comme un plus.
Il est interessant de l'ajouter comme une couche suplémentaire de programmation. Mais Il ne faut pas que l'apli repose dessus , car il ya encore pas mal de problème de compatibilité .

De plus pour en tirer vraiment parti avec php , il faut coder en PHP 5 avec un code orienté objet, ce qui n'est pas à la porté de tout le monde.

QUOTE

Dotclear en est déjà doté


si tu parle de la page ou tu peux ordonner les categories avec un drag en js , ce n'est pas de l'ajax , car il n'y pas d'echange avec le serveur , il faut une fois que tu as ordonné les categories valider ton action. An ajax plus de bouton valider pour ce genre d'operation.
pbelin
QUOTE (Gyakutsuki @ 03 fév 2006, 05:35)
Cette technologie intéresse beaucoup de monde, HPDl est à la recherche d'une personne maitrisant ce langage. Il y a des choses très intéressantes mais je trouve cette techno est un peu jeune. A suivre et à étudier


Jeune?
Alors lisez ça: http://www.framasoft.net/article3991.html

Phil
manmachine
C'est certain que c'est pas jeune , ca fait bien longtemps que j'utilise l'objet
XMLHttpRequest dans mes scripts.

Mais la nouveauté vient du fait que ce language se standardise depuis quelques temps et que des librairies éprouvées sont desormais dispo.
mosaic
Si vous avez d'autres liens sympas que celui que je donnai la-haut, je serai curieux de découvrir un peu plus cette techno

Merci par avance blush.gif
Gyakutsuki
Je pensais que c'était jeune,comme quoi ! une petite info pour toi :
http://www.generation-nt.com/actualites/11...dojo-zimbra-web
+
stepibou
magnifique! , merci!

C'est clair que c'est l'avenir, comme sur gmail, ou autre..;

Mais bon ca remplace pas la base de la prog en php, comme dit manmachine.
(utilisation de classes ...)

Et perso, je trouve tjs plus compliqué de programmer en js.

Mais, bon y a pas le choix, si on veux etre in, on est obligé. dry.gif

wink.gif
stepibou
CITATION(mosaic @ 2 Feb 2006, 10:06 PM) [snapback]154806[/snapback]

Pensez-vous que l'utilisateur lambda ( nos clients ) soit en mesure d'apprécier l'apport de cette interactivité dans son panier.


Je me permet de remonter ce post...

A mon avis, L'utilisateur apreciera, et il comprendra mieux, ..
Et surtout le commercant appreciera , et y aurra moins de source d'erreur!!!

Et oui, car qq soit la version d'oscommerce, si on modifie les quantités et qu'on clique sur commander,
sans actualiser, (recalculer), les quatités ne sont pas prisent en compte...

Donc la Ajax trouve totalement son utilité!! ( perso, je n'ai pour l'instant pas assez de connaissances pour le faire....

Donc , je me suis dit on va faire que commander , valide le formulaire.
Mais deux actions pour un formulaire c'est pas prevu... donc j'ai trouvé cette astuce :
http://forum.hardware.fr/hardwarefr/Progra...jet-84812-2.htm
Seulement en pratique , ca se complique un peu, et j'ai pas reussi...

Et de toute facon, c'est pas la solution, car si le client se fie au total pour commander, et non aux quantités, il sera trompé, !! (fin bon, vous me direz faut etre bete pour pas se fffier aux quantités qu'on viens de modif...)

La vrai solution c'est l'update de la page en temps réel de la page sans la recharger. Ce que permet ajax.

En attendant, j'ai fais une petite astuce pour faire un peu pareil, mais en rechargeant la page :
CODE
<script type="text/javascript">
    function recalculer() {
         window.setTimeout("formulaireSubmit()", '4000');
    }
    function formulaireSubmit() {
         document.getElementById('cart_quantity').submit();
    }
    </script>

Et dans l'input de quantité : ajouter :
CODE
, 'onmouseup="recalculer()" onkeyup="recalculer()"'

avant de fermer la parentaise et apres
CODE
tep_draw_input_field('cart_quantity[]','cartQty', $products[$i]['quantity']

Et pour le suppr : ajouter:
CODE
, false, 'onchange="recalculer()"'

avant de fermer la parentaise et apres
CODE
tep_draw_checkbox_field('cart_delete[]','cart_delete'.$i, $products[$i]['id']

Voila en attend que qq'un pose un code ajax...

wink.gif
mercerese
madame ou monsieur,
s'il vous plaît ?
ajax est gratuit .
les applet java sont les plus rapides sur internet puis viens le php .
si tu veux logiciel super prend webdev il programme en java et en php .
c'est un logiciel qui s'auto programme .il crée lui les bases de données et il les configure .
on m'a dit qu'il marché avec mysql .
il coute aux alentours de 1500 €
merci
dans l'attente d'un réponse, veuillez accepter mes sincères salutations distinguées .
oneill
En l'occurence il parle de webdev de la même maison
Him
Avez vous déja essayé la contribution proposées sur osc.com ?

Pour le Attribute Manager en AJAX ?


Personellement jusqu'à aujourd'hui je n'ai jamais vu que mon bureau web (Netvibes.com) dévelopé en AJAX...
Je trouve cela très sympathique.

Sinon je n'aurai qu'un lien à vous conseiller : http://siddh.developpez.com/articles/ajax/
stepibou
CITATION(mercerese @ 2 Mar 2006, 10:51 PM) [snapback]160114[/snapback]

c'est un logiciel qui s'auto programme .il crée lui les bases de données et il les configure .
on m'a dit qu'il marché avec mysql .
il coute aux alentours de 1500 €

blink.gif laugh.gif
Les doigts de pied en éventaille, tu peux partir tranquile dans les iles!
A ton retour, tu te retrouve avec un beau site tout comme tu le voulais!

Soyons serrieux, le ressort , la seule issue est l'investigation.
Des outils soit disant pro comme ca, ou 4D : c'est bizare , mais j'ai eu des contact , tous y veulent en changer:
Mal fait, pas flexible, galère à reprendre...

Faut comparer, ce qui est comparable, windev , tout ca, sont des logiciels autour du web.
Ajax est une techno du web, accessible à tout un chacun, donc forcement gratuite, vu qu'integré à des navigateurs gratuits..

Les possibilités Ajax-PHP semblent illimités! twisted.gif
Dommage qu'on ai pas trois vies...
mosaic
pour les développeurs de génie qui arriverait à adapter celà à la table reviews, un système de vote par ip utilisant ajax.

Attention, le lien suivant pointe vers un fichier zip

http://h1.ripway.com/LHS_Webmaster/Storage/AJAX_RATE.zip


J'ai un peu regarder, on pourrait virer la gestion par ip et la remplacer par l'id du client.
Développé en ajax, codé en CSS svp.... biggrin.gif ( Tout pour plaire )

Il faudrait comparer la table rating proposé dans ce zip et modifier le fichier rpc pour l'inclure dans oscommerce.

Entre autre, pas besoin de créer une connection à la base.
Virer le champ ip et remplacer les autres champs en fonction de la structure de la table reviews.


J'ai pas le temps ces jours-ci de bosser dessus mais celà représenterait une utilisation sympathique de l'ajax avant de s'attaquer à la gestion du panier ( un peu plus compliqué )

oneill
En tout cas dès que Ajax s'arrange de l'actualisation de nos paniers sans recharger la page, j'en suis...
mosaic
c'est déjà le cas sur les quelques scripts de panier que j'ai vu.
Mais attention, la gestion du panier, c'est un sport blush.gif
oneill
CITATION(mosaic @ 7 Mar 2006, 09:01 AM) [snapback]160946[/snapback]

c'est déjà le cas sur les quelques scripts de panier que j'ai vu.
Mais attention, la gestion du panier, c'est un sport blush.gif

Et tu as vu ca où ?
mosaic
http://demo.script.aculo.us/shop blush.gif
manmachine
CITATION

En tout cas dès que Ajax s'arrange de l'actualisation de nos paniers sans recharger la page, j'en suis...


L'essence meme d'ajax est de mettre à jour la page sans la recharger , apres qu'il s'agisse d'un panier , d'un vote , d'un formulaire peut importe ...
Mais ca reste une couche supplémentaire , on pourras pas ce passer du bon vieux GET/POST au cas ou javascript est désactiver.

Le coup du drag and drop est pas mal , mais apres avoir testé en situation réelle , c'est en fait contre productif car quand le produit est loing du panier ca devient du coup plus chiant de le glisser que juste cliquer . De plus il faut un autre script qui maintient le panier toujours visible mme si on scroll la page de haut en bas .

Bref c'est vraiment du gadget , le seul truc interessant c'est le fait que la page ne se charge pas et ca rien de compliquer c'est pas nouveau comme méthode ... ca reste l'objet XMLHttpObject
stepibou
lut!

Chez moi ca marche deja! plus ou moins, parce que ca gere pas pour l'instant
quand le produit a des attributs...
Et ca justement parce quej'ai pas posté le formulaire...
Soit on gere selon get_products() avec un indice i, ce qui csera peut etre mieux que
comme je l'ai fais maintenant avec l'id des produits...
bientot le code , mais faut que je l'adapte pour la ms2.
Y a pas une contrib d'ailleur sur oscommerce.com? parce que quand on s'y connait
un minimum en js, c'est pas tres compliqué...
cool.gif
stepibou
Hello,
Ajax, fait briller!
Bon c bon, je l'ai enfin adapté à la ms2! smile.gif

Arf, pour l'instant, y a un petit soucis , ca marche pas sur ie ou opera pour la modif de quantité...
donc je le met plus en download, mais en fixme un peu plus loin.

[Edit: (standby) Je le met en download ici, faite moi un retour, svp.]

Si tout va bien, je mettrai une contrib sur oscommerce.com.
C'est bizare qui ai pas deja une contrib du genre.

c'est vraiment net, cette techno!
a+
wink.gif

ps : J'avais aussi trouvé un ptit efet simpas :
http://www.dhtmlgoodies.com/scripts/fly-to...-to-basket.html
oneill
CITATION(stepibou @ 22 Mar 2006, 16:05) [snapback]164928[/snapback]

C'est bizare qui ai pas deja une contrib du genre.
http://www.oscommerce.com/community/contributions,4105
stepibou
Yes ok, ben nickel,

Les deux contribs sont à priorie complementaires :

La sienne : Ajouter au panier sans recalculer la page, dans le listing produit.
La mienne : Recalcule auto du panier sur la page shopping_cart.php.

Avec les deux, ca doit etre terrible, Mais le client peut etre surpris de tant d'automatisme..

wink.gif
Phocea
Stepibou, tu as essayé ta contrib sur une creload ?
J ai tenté l install en changeant shopping_cart.php.tpl mais apres le refresh ca ouvre l'entiere structure du site dans une table a droite du shopping cart ...
stepibou
hello Phocea,

non, je m'en suis bien gardé...! wink.gif

CITATION
apres le refresh ca ouvre l'entiere structure du site dans une table a droite du shopping cart ...

blink.gif je comprend pas trop, c quoi que t'appelle une table? ah oui <table>, c ca?
Je vois pas pourquoi ca poserai pb sur creload, j'espere que t'a bien fait un backup, je vois pas trop
unsure.gif
tout correspond entre le code de base, de ms2 et creload?

wink.gif
Phocea
Oui oui j avias fait un backup smile.gif
Tout correspond sauf evidemment le <head> pour mettre le code du script java, il faudrait soir le mettre dans mainpage ou faire un include dans la template.

Le probleme ne survient que lorsque le javax est appelé, au premier load de la page c est tout bon, mais des que l on touche au valeurs du nb de produits ou que l on essaye de l effacer, c'est comme ci il rappelait toute la template ...

Je me demande en lisant le code si le soucis n'est pas la:
CODE

tep_href_link('ajax_cart.php')

et ajax_cart.php n'est jamais lié a la template ?? Juste une intuition mais bon smile.gif
oneill
CITATION(stepibou @ 22 Mar 2006, 19:59) [snapback]164991[/snapback]

Yes ok, ben nickel,

Les deux contribs sont à priorie complementaires :

La sienne : Ajouter au panier sans recalculer la page, dans le listing produit.
La mienne : Recalcule auto du panier sur la page shopping_cart.php.

Avec les deux, ca doit etre terrible, Mais le client peut etre surpris de tant d'automatisme..

wink.gif


Exact elle ne fonctionne que sur "buy_now"
stepibou
hello,

Le fait que ce soit dans le head ne change rien...

C'est plus un pb de template surement... le tep_href_link ne devrai pas poser de pb,

Par contre , quelle navigateur utilise tu ?

Je viens de m'apercevoir que la modif de quantité ne marche pas sur ie et opéra...
Une petite erreur de js, doit en etre à l'origine,..

Donc, si vous trouvez, merci de m'en informer.

wink.gif

Bon donc vu que c tout buggé et que je trouve pas la solution pour le fairee tourner sur autre chose que firefox : je met le code ici, en esperant debloquer la situation au plus vite .. Toute aide est la bienvenue!
(le pb viens de : var cartQty = document.getElementById('cart_quantity').eval(cartQtyId).value; )

--------------------------------------------------------------------------------------------------------------

1)in includes/languages/french/shopping_cart.php :

Add before ?> near the end :

define('TEXT_CART_DEL_CONFIRM', 'Voulez vous vraiment supprimer ce produit?');


2)in includes/languages/english/shopping_cart.php :

Add before ?> near the end :

define('TEXT_CART_DEL_CONFIRM', 'Would you like to delete this product?');


3)in shopping_cart.php :


Just before : near line 28 :

</head>

Add :

CODE
<?php $first_ajax_caracter_url = (SESSION_FORCE_COOKIE_USE == 'True') ? '?' : '&'; ?>
<script type="text/javascript">
<!--//
     function writedel(text, cart_id) {
         var cartDelId = 'ajaxcartProduct'+cart_id;
         document.getElementById(cartDelId).innerHTML = '';
         document.getElementById('ajaxcartSubTotal').innerHTML = text;
     }
function changecartdel(cart_id) {
    if (confirm ("<?php echo TEXT_CART_DEL_CONFIRM; ?>")){
        if(text = file('<?php echo tep_href_link('ajax_cart.php').$first_ajax_caracter_url; ?>cart_id='+escape(cart_id))){
            writedel(text, cart_id);
        }
    } else {
        var cartCheckId = 'cart_delete'+cart_id;
        document.getElementById('cart_quantity').eval(cartCheckId).checked = false;
    }
}
     function writeqty(texte1, texte2, cart_id) {
         var cartPriceId = 'ajaxcartPrice'+cart_id;
         document.getElementById(cartPriceId).innerHTML = texte1;
         document.getElementById('ajaxcartSubTotal').innerHTML = texte2;
     }
function changecartqty(cart_id) {
    var cartQtyId = 'cartQty'+cart_id;
    var cartQty = document.getElementById('cart_quantity').eval(cartQtyId).value;
    if ( cartQty > 0) {
        if(texte = file('<?php echo tep_href_link('ajax_cart.php').$first_ajax_caracter_url; ?>cart_id='+escape(cart_id)+'&'+'product_qty='+eval(cartQty))){
            update = texte.split('|');
            writeqty(update[0],update[1], cart_id);
        }
    }
}

function file(fichier){
   if(window.XMLHttpRequest) // FIREFOX
      xhr_object = new XMLHttpRequest();
   else if(window.ActiveXObject) // IE
      xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   else
      return(false);
   xhr_object.open("GET", fichier, false);
   xhr_object.send(null);
   if(xhr_object.readyState == 4)
      return(xhr_object.responseText);
   else return(false);
}
//-->
</script>



4) in the same file, near line 91:

replace :

<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">

With :

<td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_SHOPPING_CART, 'action=update_product'), 'post', 'id="cart_quantity"'); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">


4bis) in the same file, near line 117:

replace :

if (($i/2) == floor($i/2)) {
$info_box_contents[] = array('params' => 'class="productListing-even"');
} else {
$info_box_contents[] = array('params' => 'class="productListing-odd"');
}

With :

if (($i/2) == floor($i/2)) {
$info_box_contents[] = array('params' => 'class="productListing-even" id="ajaxcartProduct'. $i .'"');
} else {
$info_box_contents[] = array('params' => 'class="productListing-odd" id="ajaxcartProduct'. $i .'"');
}


5) in the same file, near line 163:

replace :

'text' => tep_draw_checkbox_field('cart_delete[]', $products[$i]['id']));

With :

'text' => tep_draw_checkbox_field('cart_delete[]', $products[$i]['id'], false, 'onchange="changecartdel('.$i.')" id="cart_delete'.$i.'"'));


6) in the same file, near line 195:

replace :

'text' => tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']));

$info_box_contents[$cur_row][] = array('align' => 'right',
'params' => 'class="productListing-data" valign="top"',

With :

'text' => tep_draw_input_field('cart_quantity[]', $products[$i]['quantity'], 'size="4" id="cartQty'.$i.'" onkeyup="changecartqty('.$i.')"') . tep_draw_hidden_field('products_id[]', $products[$i]['id']));

$info_box_contents[$cur_row][] = array('align' => 'right',
'params' => 'class="productListing-data" valign="top" id="ajaxcartPrice'. $i .'"',


7) in the same file, near line 173:

replace :

<td align="right" class="main"><b><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></b></td>

With :

<td align="right" class="main" id="ajaxcartSubTotal"><b><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></b></td>

cool.gif add in catalog file : ajax_cart.php

CODE
<?php
/*
  $Id: ajax_cart.php,v 1.0 2006/03/08 14:51:24 stepibou Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

  require("includes/application_top.php");

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHOPPING_CART);

$cart_id_get = (int)tep_output_string_protected($_GET['cart_id']);

$products = $cart->get_products();

if(!empty($_GET['product_qty'])) {

$product_qty_get = (int)tep_output_string_protected($_GET['product_qty']);

$attributes = (isset($products[$cart_id_get]['attributes'])) ? $products[$cart_id_get]['attributes'] : '';

$cart->add_cart($products[$cart_id_get]['id'], $product_qty_get, $attributes, false);

$subTotal = '<b>' . SUB_TITLE_SUB_TOTAL  .' '. $currencies->format($cart->show_total()).'</b>';

$products_sum = '<b>' .$currencies->display_price($products[$cart_id_get]['final_price'], tep_get_tax_rate($products[$cart_id_get]['tax_class_id']), $product_qty_get) .'</b>';

echo  $products_sum.'|'.$subTotal;

} else {

$cart->remove($products[$cart_id_get]['id']);
$subTotal = '<b>' . SUB_TITLE_SUB_TOTAL  .' '. $currencies->format($cart->show_total()).'</b>';
echo $subTotal;

}

  require(DIR_WS_INCLUDES . 'application_bottom.php');
?>
azer
CITATION


ps : J'avais aussi trouvé un ptit efet simpas :
http://www.dhtmlgoodies.com/scripts/fly-to...-to-basket.html


particulierement sympa, est ce que yen a qui sont interessé de bosser un peu dessus avec moi ?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2024 Invision Power Services, Inc.