Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Contributions _ [CONTRIBUTION] iOSC3 - OSCommerce mobile

Écrit par : loran86 21 Nov 2010, 18:20

Bonjour à toutes et à tous,

Je vous livre, en ce dimanche, ma 1ère contribution OSCommerce qui permettra à vos visiteurs sur terminaux mobiles de naviguer et faire leurs achats sur votre boutique, directement sur leur téléphone portable, smartphone...

Cette contribution iOSC3 est basée sur le travail initial de Bumbarash dont la version 2.0c est disponible ici : http://www.oscommerce.com/community/contributions,6529.

Ayant trouvé l'idée séduisante, j'ai testé sa contribution mais ai décidé de la refaire à ma sauce tant le package original me semblait difficile à prendre en main pour un(e) débutant(e) sur OSC. Attention, le mot débutant(e) n'a rien de péjoratif, faut bien commencer un jour !

Changements iOSC3 vs iOSC2
- full CSS 2 & 3 (quasiment plus aucun tableau)
- ajout d'une nouvelle page : mobile_catalogue.php permettant de naviguer dans les catégories, les sous-catégories etc...
- modification de la page mobile_index.php pour permettre l'intégration d'une page d'accueil au lieu de tomber directement sur les catégories
- résolution des bugs relatifs aux chemins vers les fichiers
- ajouts dans le fichier configure.php (catalog/mobile/includes)

Reste à faire
- module avis et commentaires
- shopping_cart en CSS le cas échéant

Vous pouvez télécharger la contribution ici : http://addons.oscommerce.com/info/7636

ATTENTION

Cette contribution intègre le module MATC (obligation d'accepter les Conditions Générales de Vente avant de pouvoir s'inscrire).
Vous pouvez désactiver cette option dans le fichier mobile_create_account.php.
La contribution n'intègre aucun autre add-on, du type Eco-taxe par exemple. Il vous appartient donc de l'adapter en fonction des autres contributions installées sur votre boutique d'origine.

Terminaux compatibles
- iPhone
- iPod
- BlackBerry
- Nokia
- Sony Ericsson
- Opera Mobi
- Opera Mini
- MAUI WAP Browser
- Android
- Palm

La contribution vous est délivrée telle quelle, les instructions d'installation et la description sont disponibles dans l'archive téléchargeable.
Je ne pourrai être tenu pour responsable d'une mauvaise utilisation et ne peux que vous conseiller d'effectuer une sauvegarde de vos fichiers même si cette contribution n'influe pas directement sur le reste des fichiers de la boutique "originale".

Je vous invite également à me faire part de vos feedbacks tant du côté des développeurs ou des e-commerçants que des utilisateurs, merci à vous.

Voili voilou, amusez-vous bien, l'expérience mobile sur votre boutique devrait être un peu plus agréable pour vos visiteurs ! J'entame de mon côté les surveillances statistiques nécessaires pour connaître les taux de transformation via la version mobile, suite au prochain épisode.

Écrit par : FoxP2 21 Nov 2010, 19:13

muerf ....
c'est juste une adaptation au gabarit de l'écran d'un cellphone... rien à voir avec une appli dédiée ... le nom est trompeur IOs .... reprenant la terminologie d'Apple(Ios4)
je ne connais pas les chiffres du e-commerce via des appli dédiées aux boutiques (et donc une évolution des habitudes des internautes à réaliser des achats via leur mobile)
je note juste que tous les plus grands médias ont leur propre application (les blogger les plus influant également) et pour cause ! l'interface utilisateur est totalement revue pour s'intégrer à celle du mobile. vu le nombre actuel aujourd'hui d'os disponible (et donc autant d'UI à développer -- donc la maîtrise des système et leurs langages qui vont avec -- Objectif-C-Java-QT-c#+silverlight-symbian avec les restrictions de portabilité et d'intégration de compilo externes + les filtres sur les stores propres aux constructeurs) ça reste une solution, mais pas forcément la plus adéquate.
bref, actuellement c'est le gros bordel.(surtout quand j'ai pris connaissance des contraintes par exemple dans le pdf dehttp://go.microsoft.com/?linkid=9730558)
donc, je déteste ces systèmes de store, car comment voulez vous faire une app Windows Phone 7 'généraliste' adaptée pour oscommerce ? à ce jour, c peine perdue.(il n'y a guère que androïd qui soit le plus souple)

Écrit par : rol 21 Nov 2010, 20:19

Merci loran86 pour cette contrib m'en vais tester de ce pas.

Écrit par : Vinyl 21 Nov 2010, 21:39

Merci pour la contribution et le travail. Je suis en tain de tester. Ça fonctionne chez vous ? Moi, pas encore, sans doute raté un truc...

Écrit par : loran86 22 Nov 2010, 09:33

Hello,
Merci à la personne qui a modéré les posts trollesques, ce n'était pourtant pas mon but en postant cette contribution.
1 - il s'agit d'une CONTRIBUTION, jamais je n'ai parlé d'APPLICATION
2 - j'ai respecté le nom ORIGINAL de la contribution puisque mon travail est basé sur une contribution existante, si il semble trop Applesque je n'y suis pour rien et je ne vois pas en quoi cela est dérangeant sur le fond wacko.gif
Merci à celles et ceux qui apprécient la contrib, c'est tout ce qui m'importe smile.gif
Loran

PS : à votre disposition en cas de souci de fonctionnement.

Écrit par : Tennisdvd 22 Nov 2010, 15:00

quand je veux ajouter un produit depuis le telephone dans panier jai l'erreur qui me dit

"warning require (includes/languages/french/mobile_shopping_cart.php ?

alors que j'ai bien uploader tous les mobile.....php ainsi que le dossier "mobile" et fait la modif dans l'index?

Écrit par : titi02330 23 Nov 2010, 02:13

Salut,

Ta contrib est vraiment trop belle ! Ça fait une très jolie boutique pour mobiles !

A part un petit problème... l'adresse du fichier french :

Code
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_DEFAULT);

que j'ai du remplacer par :
Code
require('mobile/includes/languages/french.php');

dans les fichiers :
- mobile_products.php
- mobile_product_info.php
- mobile_shopping_cart.php
......

Ainsi que quelques define qui ne sont pas renseignés comme dans mobile_shopping_cart.php ou pratiquement tous les textes sont du genre HEADING_TITLE



Si je peux me permettre une petite idée d'amélioration... :

- Passer de la version normale vers mobile par détection, mais avec un cookie, qui permettrait de repasser vers la version "normale" même avec un terminal mobile...
On aurait donc en bas du site "mobile" un truc du genre :
Version Mobile/Version Classique

Ciao.

Écrit par : Tennisdvd 23 Nov 2010, 11:24

parfait merci! comment nommer les "define" ? je les trouve nul part!?

Écrit par : Tennisdvd 23 Nov 2010, 14:03

DANS MOBILE SHOPPING CART le total des commandes est ok, mais le detail total reste à 0 ?

Écrit par : ZIZOU94 23 Nov 2010, 16:42

Super contrib !!

par contre petit probleme au niveau du shopping cart : le panier est en affichage osc classique. est ce normal ?

Écrit par : ZIZOU94 23 Nov 2010, 16:55

oui effectivement il y a deux ou trois bug sur la page shopping cart :

- total de la ligne a 0
- affichage et taille aux couleurs classique oscommerce

Écrit par : Tennisdvd 23 Nov 2010, 17:13

j'ai beau chercher je ne trouve pas comment changer les 0 en montant reel!?

apres le checkout confirmation redirection vers paypal en ce qui me concerne mais pas possible de payer car la page reste classique paypal sans facture ni moyen de paiement par carte banquaire comme originalement sur le site "classique" de oscommerce.

Qui a une solution?

Merci,
Arnaud

Écrit par : ZIZOU94 23 Nov 2010, 17:19

autre chose : lors de la confirmation de commande on est redirigé vers la page de confirmation classique du site au lieu de la version mobile

Écrit par : loran86 23 Nov 2010, 18:09

Salut à tous !
Pour répondre rapidement aux différentes questions posées et aux divers bugs exposés, j'ai précisé dans mon post initial que je n'avais pas touché au fichier mobile_shopping_cart.php smile.gif ça, c'est fait.
Toutefois, comme je l'ai déjà indiqué à d'autres utilisateurs, les fichiers shopping_cart, header et footer vont être réécrits en CSS dans les prochains jours (quand j'aurai un peu le temps quoi...). Je posterai un nouveau full package + un package ne contenant que les fichiers modifiés pour celles et ceux utilisant déjà la contrib.
Donc OUI il est normal que le panier aie la tronche du panier de la boutique "normale" smile.gif
Concernant le total ligne à 0, c'est un grand mystère... Je viens de retester tout est ok chez ouam... Avez-vous bien tous ce code ?

Code
<?php
require_once('mobile/includes/application_top.php');

  if ($cart->count_contents() > 0) {
    include(DIR_WS_CLASSES . 'payment.php');
    $payment_modules = new payment;
  }

  require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_SHOPPING_CART);
  $breadcrumb->add(NAVBAR_TITLE, tep_mobile_link(FILENAME_SHOPPING_CART));
    
  require(DIR_MOBILE_INCLUDES . 'header.php');
  $headerTitle->write();
  
?>
<div id="iphone_content">
<?php echo tep_draw_form('cart_quantity', tep_mobile_link(FILENAME_SHOPPING_CART, 'action=update_product')); ?>
    <table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
  if ($cart->count_contents() > 0) {
?>
      <tr>
        <td>
<?php
    $info_box_contents = array();

    $info_box_contents[0][] = array('params' => 'class="productListing-heading"',
                                    'text' => TABLE_HEADING_PRODUCTS);

    $info_box_contents[0][] = array('align' => 'center',
                                    'params' => 'class="productListing-heading"',
                                    'text' => TABLE_HEADING_QUANTITY);

    $info_box_contents[0][] = array('align' => 'right',
                                    'params' => 'class="productListing-heading"',
                                    'text' => TABLE_HEADING_TOTAL);

    $any_out_of_stock = 0;
    $products = $cart->get_products();
    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
// Push all attributes information in an array
      if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
        while (list($option, $value) = each($products[$i]['attributes'])) {
          echo tep_draw_hidden_field('id[' . $products[$i]['id'] . '][' . $option . ']', $value);
          $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix
                                      from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                      where pa.products_id = '" . (int)$products[$i]['id'] . "'
                                       and pa.options_id = '" . (int)$option . "'
                                       and pa.options_id = popt.products_options_id
                                       and pa.options_values_id = '" . (int)$value . "'
                                       and pa.options_values_id = poval.products_options_values_id
                                       and popt.language_id = '" . (int)$languages_id . "'
                                       and poval.language_id = '" . (int)$languages_id . "'");
          $attributes_values = tep_db_fetch_array($attributes);

          $products[$i][$option]['products_options_name'] = $attributes_values['products_options_name'];
          $products[$i][$option]['options_values_id'] = $value;
          $products[$i][$option]['products_options_values_name'] = $attributes_values['products_options_values_name'];
          $products[$i][$option]['options_values_price'] = $attributes_values['options_values_price'];
          $products[$i][$option]['price_prefix'] = $attributes_values['price_prefix'];
        }
      }
    }

    for ($i=0, $n=sizeof($products); $i<$n; $i++) {
      if (($i/2) == floor($i/2)) {
        $info_box_contents[] = array('params' => 'class="productListing-even"');
      } else {
        $info_box_contents[] = array('params' => 'class="productListing-odd"');
      }

      $cur_row = sizeof($info_box_contents) - 1;

      $products_name = '<table border="0" cellspacing="0" cellpadding="0">' .
                       '  <tr>' .
                       '    <td class="productListing-data" align="center" rowspan="10"><a href="' . tep_mobile_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], SMALL_IMAGE_WIDTH/2, SMALL_IMAGE_HEIGHT/2) . '</a></td>' .
                       '  </tr>' .
                       '  <tr>' .
                         '    <td class="productListing-data" valign="top"><a href="' . tep_mobile_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '"><b>' . $products[$i]['name'] . '</b></a>';

      if (STOCK_CHECK == 'true') {
        $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']);
        if (tep_not_null($stock_check)) {
          $any_out_of_stock = 1;

          $products_name .= $stock_check;
        }
      }

      if (isset($products[$i]['attributes']) && is_array($products[$i]['attributes'])) {
        reset($products[$i]['attributes']);
        while (list($option, $value) = each($products[$i]['attributes'])) {
          $products_name .= '<br><small><i> - ' . $products[$i][$option]['products_options_name'] . ' ' . $products[$i][$option]['products_options_values_name'] . '</i></small>';
        }
      }

      $products_name .= '    </td>' .
                        '  </tr>' .
                          '  <tr><td>'.
                          '    <a href="' . tep_mobile_link(FILENAME_SHOPPING_CART,"action=remove_product&products_id=" . tep_get_uprid($products[$i]['id'], $products[$i]['attributes'])) .'">' . TABLE_HEADING_REMOVE . '</a>' .
                          ' </td></tr>' .
                        '</table>';

      $info_box_contents[$cur_row][] = array('params' => 'class="productListing-data"',
                                             'text' => $products_name);

      $info_box_contents[$cur_row][] = array('align' => 'center',
                                             'params' => 'class="productListing-data" valign="top"',
                                             '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"',
                                             'text' => '<b>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']),0, $products[$i]['quantity']) . '</b>');
    }

    new productListingBox($info_box_contents);
?>
        </td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td align="right" class="main"><b><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></b></td>
      </tr>
<?php
    if ($any_out_of_stock == 1) {
      if (STOCK_ALLOW_CHECKOUT == 'true') {
?>
      <tr>
        <td class="stockWarning" align="center"><br><?php echo OUT_OF_STOCK_CAN_CHECKOUT; ?></td>
      </tr>
<?php
      } else {
?>
      <tr>
        <td class="stockWarning" align="center"><br><?php echo OUT_OF_STOCK_CANT_CHECKOUT; ?></td>
      </tr>
<?php
      }
    }
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
          <tr class="infoBoxContents">
            <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
              <tr>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main"><?php echo tep_mobile_button(IMAGE_BUTTON_UPDATE_CART);/*tep_image_submit('button_update_cart.gif', IMAGE_BUTTON_UPDATE_CART);*/ ?></td>
                <td align="right" class="main"></form><?php echo tep_draw_form('cart_quantity', tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL')) . tep_mobile_button(IMAGE_BUTTON_CHECKOUT, 'name="checkout"') . '</form>'; ?></td>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
<?php
    //$initialize_checkout_methods = $payment_modules->checkout_initialization_method();

    if (!empty($initialize_checkout_methods)) {
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td align="right" class="main" style="padding-right: 50px;"><?php echo TEXT_ALTERNATIVE_CHECKOUT_METHODS; ?></td>
      </tr>
<?php
      reset($initialize_checkout_methods);
      while (list(, $value) = each($initialize_checkout_methods)) {
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td align="right" class="main"><?php echo $value; ?></td>
      </tr>
<?php
      }
    }
  } else {
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
        <td align="center" class="main"><?php echo TEXT_CART_EMPTY; ?></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
        <td align="center" class="main"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_mobile_button(IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
      </tr>
<?php
  }
?>
    </table>
</form>
<?php require(DIR_MOBILE_INCLUDES . 'footer.php'); ?>
</div>

J'ai testé dans tous les sens, en supprimant, en multipliant les quantités et en mettant à jour le panier, ça fonctionne...

@ZIZOU94 : oui j'ai vu ça, c'est un des points faisant partie de ma todo list et dont la correction sera intégrée au prochain package

@TennisDVD : j'ai eu des infos techniques de la part de ma plateforme bancaire et suis en train de remédier au problème du paiement CB en ligne qui génère toujours une erreur de mon côté. Très certainement encore une histoire de lien, je cite la Caisse d'Epargne :

Citation
L'affichage de la page SP+ sur mobile s'effectue comme sur ordinateur, l'application SP+ effectue les mêmes traitements quel que soit le matériel utilisé. Après vérification, le test sur IPhone/Safari ne pose pas de problème, l'erreur reçue peut provenir d'un lien de paiement mal formé.


et, logiquement (hélas), ce problème se répercute sur l'ensemble des modules de paiement CB.

@titi02330 : c'est bizarre, j'ai testé ta solution par acquis de conscience mais je me suis retrouvé avec le problème que tu rencontrais avec ma solution... lol Attention, quand on appelle le fichier de langue dans les pages mobile, on appelle le fichier de la boutique "normale", pour éviter d'avoir à se retaper tout le répertoire french (par exemple) dans le includes/languages. Ceci dit, ton idée d'amélioration est notée !

Voilà pour ce soir, suite au prochain épisode !
Restant à votre disposition.
Loran

Edit : pour celles et ceux que ça intéresse, le sujet (en anglais) sur iOSC2 par son auteur original : http://forums.oscommerce.com/topic/327785-contribution-iosc-mobile-version-of-osc-on-your-iphone/

Écrit par : Tennisdvd 24 Nov 2010, 07:47

Oui j'ai bien ce code, le total lui reste bon, c'est la ligne par detail de produit qui reste a 0, ainsi que dans le checkout avec les produits ou ils sont tous a 0 malgres et un bon total.

Merci de ton aide.
Arnaud

Écrit par : oneill 3 Feb 2011, 23:08

Et depuis ?
Je termine une boutique avec cette contrib. Un plaisir, je dois dire.

Je cale un peu sur le paiement par carte, pour l'instant (SystemPay). Le define manquant pour mobile_checkout_process.php m'a fait tourner chêvre un moment. Il me reste quelques adaptations propres à ma boutique surtout au niveau des affichages, les résultats étants satisfaisants. Je ne sais pas si cela va générer du commerce mais dès que j'annonce un développement sur Smartphone de nos boutiques, ca impressionne le chaland... Et c'est déjà cà tongue.gif

Si vous avez des boutiques qui tournent avec Iosc3, faites nous profiter. wink.gif

Et pour ceux qui n'ont pas d' Ail faune ou autre, je travail avec Opéra Mini (Avec Opera Mobile Launcher) qui est un émulateur et qui donne une bonne idée du rendu mais pas de Dragonfly pour débuguer, les données de Opera Mini étant compressées.
http://dev.opera.com/articles/view/opera-mobile-emulator/

Safari, quant à lui, à une fonction Développement qui, une fois activée, fourni également une aide précieuse.

Écrit par : brouillard 4 Feb 2011, 08:02

Super contrib, espère que les contribs essentielles (Atos, Colissimo, UPS, ...) sont disponibles ou facilement adaptables.


Merci pour cette super contrib !

@oneill :

Merci pour le lien "Opera Mobile emulator for desktop"

Écrit par : oneill 4 Feb 2011, 22:32

Pour ton interrogation, les modules dont le traitement ne demande pas à "sortir" de la boutique sont quasi certain de fonctionner. Pour les autres : Atos ou systemPay.... ou encore Socolissimo qui ouvrent des pages en exterieur ce sera plus délicat... J'ai ouïe dire (par mon p'tit doigt) que SystemPay allait sortir une version Mobile pour la fin du mois. (y a déjà une appli dédiée à l'AppStore)

Écrit par : oneill 5 Feb 2011, 16:27

SystemPay/Cyberplus fonctionne sur Iosc3
La page de paiement est celle qu'on connait bien sur. On attends la version Smartphone.

Dans mobile_checkout_confirmation.php
Après

Code
<?php
  if (isset($$payment->form_action_url)) {
    $form_action_url = $$payment->form_action_url;
  } else {
    $form_action_url = tep_mobile_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
  }
?>
<div id="iphone_content">
<?php
  echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');

  if (is_array($payment_modules->modules)) {
    echo $payment_modules->process_button();
  }
Ajoutez
Code
  if (isset($$payment->form_submit)) {
    $form_submit = $$payment->form_submit;
  }
?>
<div id="iphone_content">
<?php
  echo tep_draw_form('checkout_confirmation', $form_submit, 'post');
?>


Tada !

Écrit par : oneill 5 Feb 2011, 17:12

J'oubliais.
Un truc plutôt important qui n'est pas signalé dans la contrib (ou j'ai mal vu)

Le tri suivant qui doit être installé montre vite ses limites.

Code
2. If you need automatic redirect for mobile browsers (of course we need !), add these lines to the top of your
   catalog/index.php file

   if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone")
|| strpos($_SERVER['HTTP_USER_AGENT'], "iPod")) {
   header("location:mobile_index.php");
}
  if (stristr($_SERVER['HTTP_USER_AGENT'], "Blackberry"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "Nokia"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "SonyEricsson"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mobi"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mini"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "MAUI_WAP_Browser"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "Android"))
   {
   header("location:mobile_index.php");
   }
   if (stristr($_SERVER['HTTP_USER_AGENT'], "Palm"))
   {
   header("location:mobile_index.php");
   }
  
   just before the DOCTYPE line

Le mieux étant déjà, de le transformer en fonction à mettre dans les general.php
Code
// Le navigateur est-il un Smartphone ?
  function smartphone() {
  $smartphone = false;
   if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone") || strpos($_SERVER['HTTP_USER_AGENT'], "iPod") || stristr($_SERVER['HTTP_USER_AGENT'], "Blackberry") || stristr($_SERVER['HTTP_USER_AGENT'], "Nokia") || stristr($_SERVER['HTTP_USER_AGENT'], "SonyEricsson") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mobi") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mini") || stristr($_SERVER['HTTP_USER_AGENT'], "MAUI_WAP_Browser") || stristr($_SERVER['HTTP_USER_AGENT'], "Android") || stristr($_SERVER['HTTP_USER_AGENT'], "Palm")) {
  $smartphone = true;
}
    return $smartphone;
  }
Il suffit ensuite de l'appeler si on veut faire des différences entre l'affichage de la version PC et la version Smartphone.
Code
if(smartphone() == true) {
define('ENTRY_SUBURB', 'Suite adresse:');
}else{
define('ENTRY_SUBURB', 'Compl&eacute;ment d\'adresse:');
}
Histoire de mettre bon ordre dans la mise en page et garder le contrôle.
On peut aussi s'en servir pour choisir les modules de paiement ou de livraison que l'on souhaite
Code
   if (smartphone() == true ) {
     $check_flag = false;
}


Mais il ne faut SURTOUT PAS utiliser cette fonction en entrée de site au risque de voir tous les liens mourir sur mobile_index.php : Les liens du système de paiement en premier lieu mais aussi et surtout liens venants des moteurs de recherche ce qui est beaucoup plus balot. Pour y pallier il faut utiliser la classe mobileRedirect qui est cachée (la vilaine) dans catalog/mobile/includes/classes/mobile_redirect.php. Le plus simple est de copier ce fichier dans catalog/includes/classes/ et de l'appeler en tête d'index.php
Code
  require(DIR_WS_CLASSES . 'mobile_redirect.php');
  $mobileRedirect = new mobileRedirect;
après
Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<?php

Le problème est ainsi résolu. Les liens entrants trouveront la bonne page quelque soit la sortie (sur PC ou Smartphone.)


Gaffe ! J'ai édité 2 ou 3 trucs

Écrit par : telede 5 Feb 2011, 17:28

Hello wink.gif

En Juin 2009 j'ai posté un topic sur le forum US concernant le même type d'appli mais peut être dans le cadre d'une autre contribution, je ne saurai dire... je ne retrouve pas le topic mais j'ai le code :

Code
    function needRedirect() {
        if($this->isCancelled()) return false;
        if(strpos($_SERVER['SCRIPT_NAME'],$this->mobileDir . $this->mobileFile) > 0) return false;
        if(tep_browser_detect('iPhone') || tep_browser_detect('iPod')) return 'iPhone';
        if(tep_browser_detect('IEMobile')) return 'iPhone';
        if(tep_browser_detect('Blackberry')) return 'Blackberry';
        if(tep_browser_detect('DoCoMo')) return 'DoCoMo';
        if(tep_browser_detect('Nokia')) return 'Nokia';
        if(tep_browser_detect('SonyEricsson')) return 'SonyEricsson';
        if(tep_browser_detect('Opera Mobi')) return 'OperaMobi';
        if(tep_browser_detect('Opera Mini')) return 'OperaMini';
        if(tep_browser_detect('MAUI_WAP_Browser')) return 'GenericWAP';
        if(tep_browser_detect('alcatel')) return('alcatel'); // Alcatel Browser (PDA/Phone browser)
        if(tep_browser_detect('lg-')) return('lg-'); // LG (PDA/Phone browser)
        if(tep_browser_detect('ericsson')) return('ericsson'); // Ericsson Browser (PDA/Phone browser)
        if(tep_browser_detect('mot-')) return('mot-'); // Motorola Browser (PDA/Phone browser)
        if(tep_browser_detect('panasonic')) return('panasonic'); // Panasonic Browser (PDA/Phone browser)
        if(tep_browser_detect('philips')) return('philips'); // Philips Browser (PDA/Phone browser)
        if(tep_browser_detect('sagem')) return('sagem'); // Sagem (PDA/Phone browser)
        if(tep_browser_detect('samsung')) return('samsung'); // Samsung (PDA/Phone browser)
        if(tep_browser_detect('sie-')) return('sie-'); // SIE (PDA/Phone browser)
        if(tep_browser_detect('sec-')) return('sec-'); // Sony/Ericsson (PDA/Phone browser)
        if(tep_browser_detect('sonyericsson')) return('sonyericsson'); // Sony/Ericsson Browser (PDA/Phone browser)
        if(tep_browser_detect('mmef')) return('mmef'); // Microsoft Mobile Explorer (PDA/Phone browser)
        if(tep_browser_detect('mspie')) return('mspie'); // MS Pocket Internet Explorer (PDA/Phone browser)
        if(tep_browser_detect('wapalizer')) return('wapalizer'); // WAPalizer (PDA/Phone browser)
        if(tep_browser_detect('wapsilon')) return('wapsilon'); // WAPsilon (PDA/Phone browser)
        if(tep_browser_detect('webcollage')) return('webcollage'); // WebCollage (PDA/Phone browser)
        if(tep_browser_detect('up.')) return('up.'); // UP.Browser (PDA/Phone browser)
        if(tep_browser_detect('docomo')) return('docomo'); // I-Mode phone (PDA/Phone browser)
        if(tep_browser_detect('portalmmm')) return('portalmmm'); // I-Mode phone (PDA/Phone browser)
        return false;
}


Ca donne une idée des navigateur a prendre en compte ...

Pour ma part je tiens à saluer le projet car ca apporte un + aux ventes, surtout que quand je l'ai mis en oeuvre je me suis rendu compte que c'était significatif, mais j'avais pas mis de statistiques, mais je me suis rendu compte du phénomène avec les retour de mails de confirmation de commande qui étaient en texte (alors que sur la boutique de base ils étaient en HTML)....

Bref que du bon wink.gif

Écrit par : oneill 5 Feb 2011, 17:35

En effet ! Y a plus qu'à étoffer ma fonction smartphone() et la classe biggrin.gif Et compter le pognon... Je déconne...

Écrit par : brouillard 5 Feb 2011, 18:02

la fonction tep_browser_detect elle y est dans IOSC3 ?

Écrit par : oneill 5 Feb 2011, 18:13

Oui dans la classe mobileRedirect justement

http://code.google.com/p/mobile-oscommerce/source/browse/trunk/includes/classes/mobile_redirect.php?spec=svn12&r=12

Écrit par : telede 5 Feb 2011, 18:50

Citation (oneill @ 5 Feb 2011, 17:35) *
Et compter le pognon... Je déconne...

Bein moi non, c'est en voyant l'ampleur que ca prenait que j'avais fait cette recherche et l'adaptation lol

les Samsungs et autres commencaient a arriver en puissance ...

wink.gif

@Oneil : la solution la plus performante sera certainement un switch{ case : ...

Exemple de code pas testé :

Code
$navigateur = strtoupper(preg_replace('/[^A-Za-z0-9]/', '', $navigateur_source));
switch($navigateur)
{
case 'BLACKBERRY' :
case 'OPERAMINI' :
case 'OPERAMOBI' :
  traitement ...
case 'IPHONE' :
  traitement
default :
traitement non mobile
}


Assumant ici le fait que le Black Berry / Opéra Mini et Mobi aient les meme css, le iPhone a Part
et en regroupant au maximum les catégories de navigateurs/mobiles au sein du meme "case" ...

Écrit par : oneill 5 Feb 2011, 19:01

Moi je me projette sur les nouveaux forfaits et les nouvelles habitudes d'une certaine population plutôt jeune et nomade (sans caravane nécessairement... Je parle de l'état d'esprit.). Pas de ligne fixe, un mobile fun + un forfait illimité vers internet sans surcoût significatif (à mettre en perspective d'un abonnement à la papa : Ligne fixe et son train de forfaits à la c** + box internet et sa location.)
Pourquoi satisfaire les uns et ignorer les autres ?

Il faut être sur internet complètement pas à moitié.

Écrit par : oneill 5 Feb 2011, 21:18

Soucis avec les liens externes qui pointent vers une catégorie du genre /index.php?cPath=31 (Même réécrits, ils sont interprètés sous cette forme) ils sont transformés en /mobile_index.php?cPath=31 qui n'est que la page d'accueil
Pas bon !

Solution : on va emprunter une partie du code de mobile_mobile.php (on va se géner) et donc ajouter à mobile_index.php

Code
CODE COMPLET PLUS BAS
juste après les premiers require.


On va le mater ce truc. Il commence déjà à filer droit. twisted.gif


#########EDIT##########
Pour afficher la page mobile_checkout_success après un paiement réussi, il convient d'ajouter à catalog/mobile/includes/configure.php, cette ligne
Code
define('FILENAME_CHECKOUT_PROCESS', 'mobile_checkout_process.php');
Ca va marcher beaucoup bien mieux et ne va plus afficher la page checkout_success de la version PC (Bien que, avec la modif de classe du dessus, ce ne soit plus très vrai...)

Écrit par : oneill 5 Feb 2011, 22:47

Bon... Comme il fallait s'y attendre, même caca avec les fabricants !

Donc, reprise du code de dessus + un ajout pour les fabricants + un bon nettoyage et voici le code à ajouter dans mobile_index.php après les require tout en haut

Code
// calculate category path and manufacturer by Oneill
$redirect = false;
if (isset($cPath) && tep_not_null($cPath)) {
$categories_products_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$current_category_id . "'");
$cateqories_products = tep_db_fetch_array($categories_products_query);
if ($cateqories_products['total'] > 0) {
  $redirect = true; // display products
} else {
  $category_parent_query = tep_db_query("select count(*) as total from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$current_category_id . "'");
  $category_parent = tep_db_fetch_array($category_parent_query);
  if ($category_parent['total'] == 0) {
   $redirect = true; // display products
  }
}
}
if (isset($HTTP_GET_VARS['manufacturers_id']) && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) {
  $redirect = true; // display manufacturer
}
if($redirect)
tep_redirect(tep_mobile_link(FILENAME_PRODUCTS, tep_get_all_get_params()));


C'est mon dernier mot JP


Reste plus qu'à pièger les pages inexistantes en version Mobile comme shop_by_price par exemple.... Ou les adapter à ce format.

Écrit par : oneill 5 Feb 2011, 23:16

Si vous avez des ennuis de pages comme /mobile_products.php?manufacturers_id=13&amp;page=2 ce qui ne montre que la page 1, remplacez

Code
tep_redirect(tep_mobile_link(FILENAME_PRODUCTS, tep_get_all_get_params()));
par
Code
tep_redirect(html_entity_decode(tep_mobile_link(FILENAME_PRODUCTS, tep_get_all_get_params())));
ce qui donnera /mobile_products.php?manufacturers_id=13&page=2 et affichera bien la page 2

Bon, la dessus, dodo blush.gif

Écrit par : oneill 6 Feb 2011, 05:14

evil.gif evil.gif et evil.gif

Je viens de me rendre compte que les améliorations que j'ai apporté plus haut étaient présentes sous cette forme ou presque dans la version 2 de Iosc.... evil.gif
Une version 3 qui est moins évoluée qu'une version 2, c'est pas commun !!!

Je vérifie la version 1.0 des fois qu'elle serait déjà aux couleurs de ma boutique evil.gif

Écrit par : oneill 9 Feb 2011, 11:00

Voila, j'ai fini, du moins autant que faire ce peu.

Pas facile de montrer autrement qu'avec un smartphone. Donc voici le petit montage que j'ai fait pour ma com. Histoire de se rendre un peu compte.




Je trouve cette contrib plus que bien et je remercie ses auteurs et contributeurs


Vous remarquerez qu'il n'y a ni lien ni pub... wink.gif

Écrit par : brouillard 9 Feb 2011, 12:53

Super ! Sur quelle version elle marche ta boutique pour portable la V2 ou IOSC3 ?

Écrit par : oneill 9 Feb 2011, 13:36

C'est la iOsc3 pour l'affichage avec quelques rajouts de la V2 pour le reste (voir plus haut quand je suis pas de poil.)

Écrit par : jri 15 Feb 2011, 11:44

Merci à vous pour cette contribution,
voici les modifs que j'ai apporté

Citation (Tennisdvd @ 23 Nov 2010, 17:13) *
j'ai beau chercher je ne trouve pas comment changer les 0 en montant reel!?

dans mobile_shopping_cart.php
remplacer
Code
'text' => '<b>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']),0, $products[$i]['quantity']) . '</b>');

par
Code
'text' => '<b>' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</b>');


Citation (oneill @ 5 Feb 2011, 17:12) *
Le plus simple est de copier ce fichier dans catalog/includes/classes/ et de l'appeler en tête d'index.php
Code
  require(DIR_WS_CLASSES . 'mobile_redirect.php');
  $mobileRedirect = new mobileRedirect;
après
Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<?php


les deux lignes de code doivent également être insérées dans mobile_product_info.php

Écrit par : oneill 15 Feb 2011, 11:52

Le mieux est encore à la fin de application_top.php sauf pour une "beeeeep" creload

Par contre, il faut plutôt créer un fichier french/mobile_product_info.php à partir du french/product_info.php en le dupliquant


Jusqu'ici, j'ai adapté une Crel'autre, un multi-shop et je suis (enfin) sur une classique MS2 des familles.

Écrit par : oneill 19 Feb 2011, 12:34

J'ai fait quelques modifs sur les entêtes de pages dont j'aimerais vous faire profiter

Bien sûr les avis et suggestions seront appréciés


Tout d'abord le Doctype :

Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

semble être convenable comme ceci.

Les metas :
Code
<meta http-equiv="Content-Type"
   content="text/html; charset=iso-8859-1" />
<meta name="viewport"
   content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;" />
<meta name="apple-mobile-web-app-capable"
      content="yes" />
<meta name="apple-mobile-web-app-status-bar-style"
      content="default" />
<meta name="googlebot"
   content="noindex, nofollow">
<meta name="robots"
   content="noindex, nofollow">

L'ISO, normal pour osc

Le Viewport avec surtout largeur à la taille de l'écran et non bloqué à 320 en absolu (HTC Desire et Tatoo, ca rentre)

Les 2 suivants sont pour le matos d'Apple : Affichage plein écran comme une Apps et couleur de la barre (c'est plutôt limité à la base)

Ensuite Google que je préfère bloquer en attendant d'y voir plus clair, le but étant, dans l'absolu, de bloquer l'accès du GoogleBot Classic aux pages Mobile et réciproquement, bloquer l'accès du GoogleBot-Mobile aux pages dites "Normales"
Il y a plusieurs options comme la direction, le redirection, avec ou sans les même URLs, le Sitemap Mobile avec les balises qui vont bien, etc, etc...
Enfin, vous l'aurez compris, tout un tas de joyeusetés qu'il convient d'étudier avant de se lancer dans le grand bain en s'éloignant du bord sans la bouée canard... Il s'agit, tout de même, de ne pas torpiller le référencement de votre site principal avec du Duplicate-content ou des soupçons de Cloacking !



Le bout de code suivant est facultatif mais présente bien des avantages.
CODE
<?php $self = "http://".$HTTP_HOST.$REQUEST_URI; ?>
<link rel="alternate" media="handheld" href="<?php echo $self; ?>">
KESAKO?
Dans la version mini de Google (www.google.fr/m/) et à condition de naviguer avec un mobile (ou tout au moins, un USER_AGENT qui le laisse penser), les résultats de recherches sont suivis d'une liste d'Options (Cache, Similaire, Mobile) et le fait de cliquer sur Mobile vous dirigera vers votre site en version mobile adaptée. En fait, il s'agit d'une présentation tout en colonnes à chier il faut bien le dire... La ligne plus haut, placée essentiellement dans catalog/index.php et product_info.php empêche l'affichage de ces pages adaptées pour enfin conduire le chaland esbaudit vers la page correspondante en version Mobile dont vous n'êtes pas peu fière avec l'affichage qui va bien.
L'idéal est d'installer cette ligne et donc de diriger vos visiteurs nomades vers une page existante sur votre version Mobile. Rien de plus lourd que tomber sur la page d'accueil par défaut.


Je suis en train de bosser sur un script qui, sans en être une, n'aura que très peu de différence avec une Apps avec même une fonction navigation hors ligne avec synchronisation (cache.manifest), affichage d'une image d'attente en cas le lenteur de votre site, etc...

Écrit par : brouillard 19 Feb 2011, 12:52

La redirection se fait sur la détection de la plateforme ?, se fait-elle à partir de la page principale de la boutique (index.php) vers l'index.php de IOSC ?

pour le référencement google and cie je suis entièrement d'accord avec toi pour bloquer le tout avec noindex-noflow pour ne pas détruire le référencement de la boutique surtout si celle-ci et bien stable (en attendant une meilleur solution), parce que je pense que la partie mobile de la boutique doit aussi être référencée en tant que mobile sans détruire le contenu avec du duplicat-content de la boutique principale.

Écrit par : oneill 19 Feb 2011, 12:59

Citation (brouillard @ 19 Feb 2011, 12:52) *
La redirection se fait sur la détection de la plateforme ?, se fait-elle à partir de la page principale de la boutique (index.php) vers l'index.php de IOSC ?



Alors, ca, ca fait parti des stratégies à adopter pour le Ref. Si tu références ton site mobile ou pas en profitant du référencement de ton site principal.

Soit tes urls actuelles redirigent selon le média vers les pages correspondantes aux normales ou, tu optes pour les urls différentes et donc pour un site différent en pointant vers la page d'accueil Mobile (Attention de ne pas passer pour un site mirroir non plus mais il y a peu de chance.)

Écrit par : brouillard 19 Feb 2011, 13:08

Et la redirection, tu l'as fait sur la détection de la plateforme ?, l'as-tu fait à partir de l'index.php de la boutique vers l'index.php de IOSC ?

Écrit par : oneill 19 Feb 2011, 14:25

Non, au départ je suis parti comme ca (tout vers l'index) mais, j'en ai vite vu les limites. J'ai (pour l'instant) opté pour une détection qui est faite par une classe à la fin d'application_top (c'est donc bien une redirection). J'utilise en fait toutes les ressources de mon site PC, le site mobile n'en étant qu'une excroissance. Les résultats de recherches sur les moteurs ou les liens externes menent exactement là où le visiteur pense aller. la différence se fait uniquement selon son média. C'est pourquoi j'ai décidé de bloquer l'accès aux moteurs vers mon site mobile (par le robots.txt). Mon site PC étant dans les résultats quoiqu'il en soit, peu importe comment l'affichage s'effectue. L'idée étant que ce n'est pas parce que l'utilisateur est sur un Mobile qu'il doit en baver comme un Russe pour laisser son N° de carte bleue... Le gars peut avoir du mérite mais faut pas déconner non plus.
Au départ, je pensais juste développer un truc pour le tracking des colis vu le nombre de personnes qui le faisait sur mon site. Et de fil en aiguille...

Je fais ce choix mais je me trompe peut être. On verra.

Écrit par : oneill 22 Feb 2011, 23:13

Des petits téléphones apparaissent au bout de mes résultats sur google mobile. On dirait qu'il fait bien la différence. En fin les 2 bots font la différence
Le bot classic atterri bien sur les pages PC et google-mobile va bien sur les pages mobile.



PS je vais séparer ce sujet en deux mais je ne sais pas bien où.

Écrit par : neji 28 Feb 2011, 15:48

Bonjour,

Je rencontre un petit problème avec cette contribution. J'utilise STS templates pour le site "normal" (hors mobile) et les pages portables sont lancé avec le template basique (soit sts_templates.html), ce qui ne devrait pas être le cas en théorie.

J'ai un autre site utilisant iosc V2 qui ne prend pas en compte les templates quand les clients se trouvent sur les pages mobiles.

Je sais pas si quelqu'un d'autre rencontre ce problème, mais je bloque la dessus.

Quelqu'un aurait-il une idée ?

EDIT : j'ai conditionné le sts_template.html pour qu'il affiche que le contenu, ce qui a corrigé le problème. Reste à voir s'il n'y a pas d'autres problèmes de compatibilité avec cette contribution.

Écrit par : oneill 28 Feb 2011, 18:40

J'ai adapté le système de sélection/redirection de iosc2 sur iosc3 qui pour moi est une régression à ce niveau. Qu'en est il pour toi ?

Écrit par : bear 1 Mar 2011, 16:21

bonjour,

Depuis aujourd'hui 1 mars 2011, la page de paiement de la plateforme de paiement Systempay gère dynamiquement le WEB Agent de votre navigateur.
En clair: si vous avec un navigateur mobile type iphone, android, etc, vous arriverez au moment de payer sur une page adaptée au format de votre média.

merci de nous remonter éventuellement les téléphones ou autres tablettes pour lesquels nous ne reconnaitrions pas automatiquement le WEB Agent.
nous enrichissons notre modèle au fur et à mesure.

n"hésitez pas à tester rapidement. nous avons déjà un retour d'un utilisateur magento commerce très content. biggrin.gif smile.gif wub.gif

Écrit par : oneill 1 Mar 2011, 17:57

Yessssssss mais à l'heure qu'il est, pas de changement avec Opera/9.80 (Windows NT 5.1; Opera Mobi/7457; U; fr) Presto/2.5.28 Version/10.1 chargeable sur Android

Mais ca fonctionne avec Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_2 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A400 Safari/6531.22.7


Merci en tous les cas




Sur la deuxième page, le logo de la carte choisie est décalé à droite.

Écrit par : bear 1 Mar 2011, 18:17

bonjour,

nous sommes preneurs des WEB Agent mobile qui ne réagirait pas comme attendu.
nous mettrons à jour dans ce cas notre moteur de sélection.

merci d'écrire dans ce cas à supportvad@lyra-network.com

bons tests.

Écrit par : neji 2 Mar 2011, 11:53

Citation (oneill @ 28 Feb 2011, 18:40) *
J'ai adapté le système de sélection/redirection de iosc2 sur iosc3 qui pour moi est une régression à ce niveau. Qu'en est il pour toi ?


J'ai essayé justement, sans résultat. J'ai même essayé de restreindre sts en conditionnant l'exécution de la classe mais trop d'éléments du code dépendaient de celle-ci avec les modifications qu'on avait apporté ... J'essayerais de voir pour une autre solution plus tard. En attendant ca fonctionne avec la condition que j'ai apporté, mais bon, c'est pas très "propre".

Pour Bear, je ferais des tests une fois que notre banque nous aura envoyé les dernières informations.

Écrit par : cebb 10 Mar 2011, 17:45

Bonjour à tous ..

j'ai installer la contrib iosc3, après quelques modifications ca fonctionne ,(merci à celui qui à fait le DEV )
il me reste tout de même un problème ,
mes annonces sont faites en HTML et CSS
fixé a 645 px,
je cherche à les réduire automatiquement en mode mobile ,
a 320px

j'ai fais plusieurs essais mais elle s'affichent toujours à la taille d'origine.

pouvez vous me donner une piste ?

Merci d'avance. idea.gif
Seb

Écrit par : oneill 10 Mar 2011, 18:07

Comme je dis plus avant, de créer une fonction qui déterminera si le visiteur utilise un smartphone ou pas.
Fonction à mettre dans les general.php

Code
// Le navigateur est-il un Smartphone ?
  function smartphone() {
  $smartphone = false;
   if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone") || strpos($_SERVER['HTTP_USER_AGENT'], "iPod") || stristr($_SERVER['HTTP_USER_AGENT'], "Blackberry") || stristr($_SERVER['HTTP_USER_AGENT'], "Nokia") || stristr($_SERVER['HTTP_USER_AGENT'], "SonyEricsson") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mobi") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mini") || stristr($_SERVER['HTTP_USER_AGENT'], "MAUI_WAP_Browser") || stristr($_SERVER['HTTP_USER_AGENT'], "Android") || stristr($_SERVER['HTTP_USER_AGENT'], "Palm")) {
  $smartphone = true;
}
return $smartphone;
  }
Il suffit ensuite de l'appeler si on veut faire des différences entre l'affichage de la version PC et la version Smartphone.
Code
if(smartphone() == true) {
define('ENTRY_SUBURB', 'Suite adresse:');
}else{
define('ENTRY_SUBURB', 'Compl&eacute;ment d\'adresse:');
}
Histoire de mettre bon ordre dans la mise en page et garder le contrôle.
On peut aussi s'en servir pour choisir les modules de paiement ou de livraison que l'on souhaite
Code
   if (smartphone() == true ) {
  $check_flag = false;
}



En gros, tu fais ce que tu veux. Pour les photos à réduire à 240, on peut utiliser une routine automatique fonctionnant avec la GD lib

Écrit par : neji 14 Mar 2011, 18:05

en passant, il vaut mieux utiliser des pourcentages que des px pour avoir un affichage correct pour tous les mobiles différents (surtout l'iphone 4 qui à une résolution max de 900px ou même pour effectuer des redimensionnements corrects lors du passage portrait à paysage et inversement).

Au cas ou j'ai trouvé une petite contrib jquery bien sympathique pour faire des sliders d'image par "déplacement de doigt" sur l'écran. Pour les interessés : http://www.netcu.de/jquery-touchwipe-iphone-ipad-library

Par contre n'oubliez pas de prendre le script jquery.cycle.all.min.js présent dans le code source de la page (obligatoire pour faire comme dans l'exemple dans la page cité ci-dessus)

Écrit par : oneill 14 Mar 2011, 18:18

Merci pour le lien smile.gif
Ca marche aussi avec Android

En même temps, un java qui ne marcherait pas sous Android....

Écrit par : neji 15 Mar 2011, 10:56

ouais ca aurait été bizarre ^^

je vais voir aussi si je pourrais pas utiliser les media queries en css3 pour la mise en page dynamique.

Écrit par : oneill 15 Mar 2011, 11:38

J'ai lu quelque part que c'est possible

Écrit par : neji 16 Mar 2011, 18:02

Finalement je devrais pas avoir besoin d'utiliser les media queries, on a trouvé une autre solution pour adapter les largeurs.

Si toutefois quelqu'un était intéressé par ceci : j'ai trouvé un tutoriel que j'ai gardé sous le coude au cas ou => http://www.alsacreations.com/article/lire/930-css3-media-queries.html

Par contre j'ai un autre soucis, j'ai pas réussi a faire de l'url rewriting sur les pages mobile ... j'ai essayé pas mal de choses via le htaccess, rien a été interprété correctement ...

Écrit par : brouillard 26 Apr 2011, 11:14

Concernant la largeur du de l'écran du mobile qui est variable d'un type à un autre, j'ai trouvé ceci sur http://forum.alsacreations.com/topic-27-49674-1-Gerer-le-Viewport-dun-mobile.html.

Écrit par : neji 29 Apr 2011, 12:38

j'avais lu cet article avant et ca m'avait bien aidé, et c'est ce qui m'a dirigé vers les media queries (que je n'ai toujours pas commencé d'ailleurs ...)

Écrit par : brouillard 1 May 2011, 11:31

Citation (neji @ 29 Apr 2011, 12:38) *
j'avais lu cet article avant et ca m'avait bien aidé, et c'est ce qui m'a dirigé vers les media queries (que je n'ai toujours pas commencé d'ailleurs ...)


+1

voici la feuille de style de alsacreations :

http://www.alsacreations.com/astuce/lire/1177-une-feuille-de-styles-de-base-pour-le-web-mobile.html

Écrit par : Hervek 3 May 2011, 16:25

Bonjour a tous ;
Nouveau sur Oscommerce, j'essaie d'apprendre ...

J'essaie d'installer cette "version mobile" et j'avoue que je m'y perds dans toutes les modifs ...

Je ne sais plus ce qui est a faire ce qui ne l'est pas .
Mes Problemes :
Sur toutes les pages : des problemes d'accents ... uft-8 ? mais ou ?
La page Mobile_product : il ne trouve pas le fichier language (includes/langages/french/mobile_index.php)
(idem sur la page about)
Box_heading_manufacturers , n'est pas traduit : je ne sais pas ou le mettre.

Eh oui ... je suis assez perdu . Si vous pouviez m'aider
ou si qq un a une version , "propre" de la derniere version de ce script.

Par avance un GRAND Merci !!

Écrit par : neji 10 May 2011, 17:01

Salut Hervek ,

Pour répondre à tes questions :

Citation
Sur toutes les pages : des problemes d'accents ... uft-8 ? mais ou ?


Je me souviens pas d'avoir eu a modifier ceci, mais bon d'un coté la base du site sur lequel j'ai ajouté cette contribution était d'or et déjà en UTF-8 ...


Citation
La page Mobile_product : il ne trouve pas le fichier language (includes/langages/french/mobile_index.php)


J'ai modifié tous les accès de ces pages vers le chemin includes/languages/la_langue_en_question/le_fichier_en_question et non la version mobile

Citation
Box_heading_manufacturers , n'est pas traduit : je ne sais pas ou le mettre.


Sachant qu'il n'y a pas de manufacturer sur mes pages ... difficile de t'aider pour ca ...

Écrit par : Hervek 10 May 2011, 18:09

Merci bcp de tes réponses ... je teste cela des que Possible !

Encore Merci

Écrit par : Guijuilefou 3 Jun 2011, 19:25

Bonjour à tous,

Ayant eu le besoin d'ajouter une vue mobile sur un site oscommerce, je suis tombé sur cette contribution qui je dois dire est excellente.
Je l'ai installé, testé et ai constaté la plupart des bugs qui vous avez remonté tout au long de ce topic.

Donc plutôt que d'effectuer les correction dans mon coin, j'ai mis à disposition une nouvelle version d'iOSC (toujours au même endroit : http://addons.oscommerce.com/info/7636)

Au menu :

1°) Corrections / améliorations
- Correction du bug d'appel aux fichiers de langues sur certaines pages.
- Correction du calcul du prix par produit dans mobile_shopping_cart
- Remplacement texte "hydrozone" qui trainait en dur et l'ai remplacé par l'appel au titre du site ( <?=TITLE?> )
- Amélioration du code HTML dans mobile_login.php : suppression des tags <br/> et mise en place d'un div par ligne de formulaire (Login et mode de passe)
- Réduction de la taille du texte des produits (passage de 12 à 10px) dans la liste des produits (évite de "casser" l'interface lorsque les produits ont un nom très long)
- ajout de la propriété MOBILE_FOOTER_TEXT_BODY pour spécialiser le texte du body du site mobile par rapport au site classique déjà existant
- ajout d'une fonction de détection du navigateur par le User Agent (basée sur un post de ce topic)


2°) Nouvelles fonctions :
- Mise en place du switch vue classique / vue mobile (voir le guide d'installation pour la mettre en place côté site classique.
ATTENTION : la mise en place cette mécanique implique pour ceux qui utilisent l'ancienne version de supprimer le code de détection du navigateur.

Je suis en train de terminer de tester et ai ajouté encore quelques fonctionnalités aidant entre autre à la personnalisation rapide des vues mobiles. Donc un v3.2 va bientôt suivre (ce WE ?)
J'intégrerai aussi les corrections pour les derniers bugs recensés sur ce fil.

N'hésitez pas à poster vos retours.

Bonne soirée.

Écrit par : Vinyl 4 Jun 2011, 11:32

Merci Guijuilefou pour toutes ces améliorations.

Première chose, le lien dans ton post ne fonctionne pas. Mais c'est juste un caractère en trop dans l'url (une parenthèse) donc j'ai pu accéder à la contribution en supprimant ce caractère.

Je viens de l'installer et de la tester rapidement.

Ça fonctionne nettement mieux que la première version.

J'ai pu surfer sur le catalogue, ajouter des produits au panier, me logger, passer les étapes du paiement et accéder au serveur de la banque. Donc par rapport à la première version, c'est vraiment plus fonctionnel.

Donc bravo pour tout ce travail.

Je vais continuer les tests ce WE et te dire si je vois des choses à modifier.

Par contre, au niveau paiement, je n'ai pas encore pu tester. Le serveur CMCIC ne reçoit pas les infos et idem pour Paypal.

Mais je dois regarder en détail comment faire (cf. installation : addtionnal referal url).

Bon we. Et merci à toi.

Écrit par : Guijuilefou 4 Jun 2011, 17:06

Salut Vinyl,

Merci pour tes retours rapides.
Je viens de corriger le lien wink.gif

Comme je disais dans mon premier post, au fur et à mesure de mes propres tests j'ai continué à améliorer des choses :
- Markup HTML de la page mobile_create_account : sur des résolutions faibles type iphone 3gs on avait des chevauchements des champs et des libellés. J'ai donc refait le même boulot que sur la page de login avec un encadrement de chaque champ accompagné de son libellé par des div.
- Intégration des métadonnées qui vont bien pour le référencement en tant que site mobile.
- Correction + amélioration de l'activation ou non du MATC.
- Ajout d'une fonction pour couper automatiquement les noms de produits trop longs (nombre de caractères paramétrable dans le configure.php) histoire d'éviter de se retrouver avec des produits qui ne s'ordonnent pas correctement.
- Ajout d'un style custom.css en plus des styles existants afin de permettre de centraliser le customisations et simplifier les mises à jour.

Je pense aussi rendre l'affichage des informations du footer par défaut (date et nombre de requêtes) désactivable par paramètre dans le configure.

En je ne suis pas repassé encore sur toutes les pages, donc des petites corrections à droite et à gauche.

A très bientôt donc wink.gif



Écrit par : Guijuilefou 4 Jun 2011, 17:09

Notes aux intéressés : je teste sur iPhone 3Gs et Samsung Galaxy S. Je serais preneurs de retours sur BB sans tactile (Curve / Bold) et tactile (Torch...) cool.gif

Écrit par : Garga 5 Jun 2011, 00:51

Bonsoir,

Je viens de test la derniere version mis à dispo par Guijuilefou,que je remercie au passage, mais je dois avoir raté qqchose car ca ne fonctionne pas chez moi.
Pas d'URL rewriting et pas de catalogue non plus, j'ai un message :
Fehlende® oder ungrültige®
GröBenparameter!

Si quelqu'un a une idée, merci d'avance...

Écrit par : Guijuilefou 5 Jun 2011, 10:18

Citation (Garga @ 5 Jun 2011, 00:51) *
Bonsoir,

Je viens de test la derniere version mis à dispo par Guijuilefou,que je remercie au passage, mais je dois avoir raté qqchose car ca ne fonctionne pas chez moi.
Pas d'URL rewriting et pas de catalogue non plus, j'ai un message :
Fehlende® oder ungrültige®
GröBenparameter!

Si quelqu'un a une idée, merci d'avance...


Salut Garga,

Désolé j'ai un peu de mal avec l'allemand...
Fehlende® oder ungrültige® -> Manquant ou non valide
GröBenparameter! -> ???

Bref il te manque un paramètre quelque part... Peux-tu donner plus de précisions, quelle page as-tu appelée pour avoir ce message ?

Écrit par : Garga 5 Jun 2011, 10:32

Bonjour,

J'ai ce message lorsque je clic sur une page de catégorie.
URL:
www.MONSITE.com/mobile_products.php?cPath=30

-------Edit-------------

J'ai juste envoyer les fichiers, tel que, dans la version mis à dispo.
Petite précision, l'arbo de mon site est comme suis:
-CatA
-SubCatA1
-Products
-SubCatA2
-Products
-SubCatA3
-Products
-CatB
-SubCatB1
-Products
-SubCatB2
-Products
-SubCatB3
-Products

Écrit par : Garga 5 Jun 2011, 11:23

Ce message d'erreur viens de /includes/html_output.php

CODE
umask(0);
!is_dir ($cachedir)
? mkdir ($cachedir, 0777)
: system ("chmod 0777 ".$cachedir);

(!isset ($x) || ereg ('^[0-9]{1,}$', $x, $regs)) &&
(!isset ($y) || ereg ('^[0-9]{1,}$', $y, $regs)) &&
(isset ($x) || isset ($y))
? true
: DIE ('Fehlende® oder ungültige® Größenparameter!');


Mais alors la je pige pas...
Peut etre un reset du cache SEO???

Écrit par : Guijuilefou 5 Jun 2011, 12:07

Citation (Garga @ 5 Jun 2011, 10:32) *
Bonjour,

J'ai ce message lorsque je clic sur une page de catégorie.
URL:
www.MONSITE.com/mobile_products.php?cPath=30

-------Edit-------------

J'ai juste envoyer les fichiers, tel que, dans la version mis à dispo.
Petite précision, l'arbo de mon site est comme suis:
-CatA
-SubCatA1
-Products
-SubCatA2
-Products
-SubCatA3
-Products
-CatB
-SubCatB1
-Products
-SubCatB2
-Products
-SubCatB3
-Products


L'arborescence ne me choque pas (j'ai à peu près la même).

Écrit par : Guijuilefou 5 Jun 2011, 12:33

Citation (Garga @ 5 Jun 2011, 11:23) *
Ce message d'erreur viens de /includes/html_output.php

CODE
umask(0);
!is_dir ($cachedir)
? mkdir ($cachedir, 0777)
: system ("chmod 0777 ".$cachedir);

(!isset ($x) || ereg ('^[0-9]{1,}$', $x, $regs)) &&
(!isset ($y) || ereg ('^[0-9]{1,}$', $y, $regs)) &&
(isset ($x) || isset ($y))
? true
: DIE ('Fehlende® oder ungültige® Größenparameter!');


Mais alors la je pige pas...
Peut etre un reset du cache SEO???


Tu peux retester en commentant ces lignes de code ?
P.S. de quelle contrib vient ce code ?

Écrit par : Garga 5 Jun 2011, 12:48

Il me semble qu'il s'agit de la contribution Thumbimage, je suis plus très sur. Ca fait un moment que j'ai mis ça en place.
fonction thumbimage:

CODE
function thumbimage ($image, $x, $y, $aspectratio, $resize, $cachedir){

/*##############################################
# - Thumbnail-Script v1.3 - #
# Generating thumbnails 'on-the-fly' with PHP #
# #
# © by Christian Lamine, FlashDreams OHG #
# http://www.flashdreams.de/ #
# #
# Modified by http://www.tse.at #
# Modified by lars@iwer.de #
# #
# This script may be freely used, distributed #
# and modified without any charge as long as #
# this copyright information is included. #
# #
# Any commercial selling of this script is #
# forbidden. #
# #
# The author is not responsible for possible #
# damage which may result from the application #
# of this script, neither direct nor indirect. #
# Use at your own risk! #
##############################################*/

error_reporting(0);

$types = array (1 => "gif", "jpeg", "png", "swf", "psd", "wbmp");
// Formats Not Supported - To use this feature uncomment the line below
// (beginning with ($not_supported_formats) and add the files types you do not
// want thumbed.
// $not_supported_formats = array ("GIF"); // Write in capital Letters!!
umask(0);
!is_dir ($cachedir)
? mkdir ($cachedir, 0777)
: system ("chmod 0777 ".$cachedir);

(!isset ($x) || ereg ('^[0-9]{1,}$', $x, $regs)) &&
(!isset ($y) || ereg ('^[0-9]{1,}$', $y, $regs)) &&
(isset ($x) || isset ($y))
? true
: DIE ('Fehlende® oder ungültige® Größenparameter!');

!isset ($resize) || !ereg ('^[0|1]$', $resize, $regs)
? $resize = 0
: $resize;

!isset ($aspectratio) || !ereg ('^[0|1]$', $aspectratio, $regs)
? isset ($x) && isset ($y)
? $aspectratio = 1
: $aspectratio = 0
: $aspectratio;

!isset ($image)
? DIE ('Es wurde kein Bild angegeben!')
: !file_exists($image)
? DIE ('Die angegebene Datei konnte nicht auf dem Server gefunden werden!')
: false;

$imagedata = getimagesize($image);

!$imagedata[2] || $imagedata[2] == 4 || $imagedata[2] == 5
? DIE ('Bei der angegebenen Datei handelt es sich nicht um ein Bild!')
: false;

$imgtype="!(ImageTypes() & IMG_" . strtoupper($types[$imagedata[2]]) . ")";
if ((eval($imgtype)) || (in_array(strtoupper(array_pop(explode('.', basename($image)))),$not_supported_formats))) {
$image = substr ($image, (strrpos (DIR_FS_CATALOG . '/', '/'))+1);
return $image;

}

if (!isset ($x)) $x = floor ($y * $imagedata[0] / $imagedata[1]);


if (!isset ($y)) $y = floor ($x * $imagedata[1] / $imagedata[0]);

if ($aspectratio && isset ($x) && isset ($y)) {
if ((($imagedata[1]/$y) > ($imagedata[0]/$x) )){
$x=ceil(($imagedata[0]/$imagedata[1])* $y);
} else {
$y=ceil($x/($imagedata[0]/$imagedata[1]));
}
}
$thumbfile = '/'.$x.'x'.$y.'_'. basename($image);
if (file_exists ($cachedir.$thumbfile)) {
$thumbdata = getimagesize ($cachedir.$thumbfile);
$thumbdata[0] == $x && $thumbdata[1] == $y
? $iscached = true
: $iscached = false;
if (@filemtime($cachedir.$thumbfile) < @filemtime($image))
$iscached = false;
} else {
$iscached = false;
}

if (!$iscached) {
($imagedata[0] > $x || $imagedata[1] > $y) || (($imagedata[0] < $x || $imagedata[1] < $y) && $resize)
? $makethumb = true
: $makethumb = false;
} else {
$makethumb = false;
}



if ($makethumb) {
$image = call_user_func("imagecreatefrom".$types[$imagedata[2]], $image);
if (function_exists("imagecreatetruecolor") && ($thumb = imagecreatetruecolor ($x, $y))) {
imagecopyresampled ($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]);
} else {
$thumb = imagecreate ($x, $y);
imagecopyresized ($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]);
}
call_user_func("image".$types[$imagedata[2]], $thumb, $cachedir.$thumbfile);
imagedestroy ($image);
imagedestroy ($thumb);
$image = DIR_WS_IMAGES . 'imagecache' . $thumbfile;
} else {
$iscached
? $image = DIR_WS_IMAGES . 'imagecache' . $thumbfile
: $image = substr ($image, (strrpos (DIR_FS_CATALOG . '/', '/'))+1);
}
return $image;

}


Si je commente ces lignes, ça fonctionne mais ce bout de code est forcement la pour une raison...
J'ai peur de raté un truc et planter mes clients si ce code est utile (et si il est la il y a une raison).
Ca ne serai pas la mise en cache des images? Si c'est le cas, dur dilemme...

Écrit par : Garga 5 Jun 2011, 12:59

Petit détail important, mes produits s'affichent bien mais impossible de mettre dans le panier ou de consulter un produit.
SEO semble ne pas fonctionner, j'arrive systématiquement sur la page mobile_index.php

Écrit par : Guijuilefou 5 Jun 2011, 13:30

OK, pas de panique et back to basics wink.gif

Si tu reviens sur l'accueil c'est que la fonction de sélection de la vue (classique ou mobile) n'arrive pas à positionner et/ou récupérer la valeur qui va bien dans la session.

Petite question : Comment testes-tu ta vue mobile ?

Perso j'utilise 2 plugins Firefox :
1°) User Agent Switcher : pour forcer un user-agent de type iphone 3
2°) Mobilify pour avec une vue mobile sympa sur FireFox.

Sinon j'utilise aussi la version d'Opéra Mobile compilée pour Windows : http://labs.opera.com/news/2010/04/22/

Écrit par : Garga 5 Jun 2011, 13:40

Je panique pas, j'ai mis ca sur mon site de dev, pas en prod...

Je fais mes test avec Opera Mini, celui qu'Oneill à mis en lien.

Écrit par : Guijuilefou 5 Jun 2011, 14:45

Quelle que soit la page mobile_xxx.php que tu interroges tu es redirigé vers la mobile_index.php ? ou c'est juste quand tu ajoutes un produit dans ton shopping cart ?

Écrit par : Garga 5 Jun 2011, 15:08

Des que je veux aller sur une page produit ou ajouter un produit dans mon panier je suis redirigé.
Sinon, pour le reste ça a l'air d'aller.

Je n'ai pas testé la partie connecté encore...
Tant que je ne peux consulter mes produits normalement, je ne pousse pas + les tests

Écrit par : Guijuilefou 6 Jun 2011, 08:15

Bonjour à tous,

Je viens de déposer une nouvelle version d'iOSC (v3.2a) : http://addons.oscommerce.com/info/7636
Encore pas mal de corrections de bugs graphiques et de fonctionnement.

Voici l'extrait du changelog :

ChangeLog v3.2
- In productlist view : Add function to shrink product names if to long (parameter is set in configure.php)
- Add translation in all languages for switch to mobile/ classic view.
- BugFix for MATC activation (or not) : add parameter MATC_AT_REGISTER in configure.php
- Code improvement on switch between classic and mobile view (not finished yet)
- Add Compatibility mode to prevent incompatibility with other contribs (ie. ultimate_SEO V5)
- Add parameters in configure.php to show/hide date and statistics in footer.
- Add mobile specific meta informations
- Bugfix on mobile_checkout_confirmation : price per product was not calculated
- Add custom.css file to let user put all his customizations in one file.

Known issues : switch mobile to classic view doesn't work but switch classic to mobile view is OK.


Merci à Garga pour la grosse phase de tests qu'il a effectuée.
ça m'a permis d'initier le chantier d'une mécanique de reroutage suite à la détection d'un mobile plus élégante avec un redirection qui à terme ne pointera pas uniquement sur mobile_index.


Dans l'attente de vos retours wink.gif

Bonne journée

Écrit par : Guijuilefou 6 Jun 2011, 08:25

Garga m'a remonté des soucis avec son module Paypal. Nous allons corriger ça rapidement.
Garga, peux-tu par contre m'indiquer quelle est ta contrib (ainsi que la version) pour PayPal ?

Écrit par : neji 6 Jun 2011, 16:59

salut,

Je tenais a féliciter guijuilefou pour avoir repris tout depuis le début (j'avais pas eu le temps de mon coté et pourtant j'en avais besoin pour les autres sites ...).

Je testerais cette nouvelle version de la contrib' pour faire une petite upload des autres cas (ca changera de la v2).

Par contre petite question, as-tu prévu une modification de résolution pour le dernier Iphone ?( qui a une plus grande résolution que les autres mobiles).

Je me rapelle qu'on avait intégré des images "HD" par rapport à la version normale. (c'est juste une petite suggestion pour améliorer encore la contrib')

Écrit par : Guijuilefou 7 Jun 2011, 14:29

Salut Neji,

Merci pour tes encouragements wink.gif
En ce qui concerne le support de l'iphone 4 et de sa résolution de 960 x 640 pixels je n'ai rien prévu de spécifique pour l'instant.

Toutes les résolutions sont au final gérées de facto, dans la mesure où c'est du HTML et que la structure initiale des vues mobile depuis iOSC2 et 3 est prévue pour "s'étirer".
Il m'arrive de tester en dev iOSC sur mon 24 pouces. c'est pas top super beau mais c'est laaaaaargement utilisable donc une résolution de 960x640 doit correctement se comporter wink.gif

Bon ça c'est pour la partie HTML. Il reste effectivement le problème des images, histoire de maximiser la place sur l'écran. Je serais curieux de voir le travail que vous aviez fait sur les images "HD".

Pour le moment je préfère me concentrer sur l'essentiel : Le fonctionnement impeccable des modules checkout_shipping et checkout_payement wink.gif

Écrit par : Guijuilefou 8 Jun 2011, 06:46

Bonjour,

Nouvelle version d'iOSC déposée ! (v3.2b) : http://addons.oscommerce.com/info/7636

Ci-dessous le changeLog :

New Release (v3.2b) of iOSC - mobile version of OSCommerce for smartphone

ChangeLog v3.2b :
- bugfix : switch mobile to classic is now OK.
- bug fix : site title and page title was not displayed correctly
- bug fix : shopping cart was not displayed since v3.2a.


Le + important est la correction de cette pu#!& de fonction de switch mobile / classique biggrin.gif

Je vais à présent me concentrer sur les module checkout_payement et les optimisations graphiques.

Bonne journée

Écrit par : Garga 8 Jun 2011, 08:44

Merci beaucoup Guijuilefou mais tu ne serais pas tomber du lit pour faire ca? tongue.gif
Si tu as besoin de test avec le module paypal n’hésites pas.
Je met Gtalk en routre...

Écrit par : Guijuilefou 8 Jun 2011, 09:19

Citation (Garga @ 8 Jun 2011, 08:44) *
Merci beaucoup Guijuilefou mais tu ne serais pas tomber du lit pour faire ca? tongue.gif

Disons que le bug sur le switch mobile - classique commençait à passablement m'énerver smile.gif

Écrit par : ipolis 8 Jun 2011, 23:08

Superbe pour cette last version.
Bravo.

Cependant,
lors du choix de paiement par CB :
J'ai systématiquement un :
1) Paiement en phase de test qui s'affiche sur la version mobile (tout est FULL ok sur la version classique)
2) Puis un retour AUTO sur la page mobile_index.php
3) Et enfin un email d'ATOS :
----------------------------------------------------------------------------------
Subject: ATOS AutoResponse Status

xx.xxx.xx.xxx tries to connect to /shop2/checkout_process.php

Allowed ip is : 193.xx.xx.xx,193.56.xx.xx,193.56.xx.xx
Error occurs in /shop2/checkout_process.php
-----------------------------------------------------------------------------------
Comment configurer cette nouvelle page MOBILE page pour la faire accepter par ATOS ?
Et cette histoire d'adresse IP, comment contourner le probleme ?
Bon, bon, j’arrête avec mes questions chiantes ;:)


Écrit par : Garga 9 Jun 2011, 07:58

Bonjour Ipolis,

Comme le disait Guijuilefou hier:

Citation
Je vais à présent me concentrer sur les module checkout_payement et les optimisations graphiques.


IOSC v3.2b ne fonctionne pas non plus avec Paypal.

En effet mobile_checkout_payement semble ne pas contenir de <input type="hidden"> et ne transmet pas toutes les info nécessaire au paiement...

Écrit par : ipolis 9 Jun 2011, 23:10

GARGA merci pour tes explications detaillées, je comprend maintenant precisement ou en est le developpement de Guijuilefou
Bon CODE.

Écrit par : oneill 10 Jun 2011, 08:59

Citation (Garga @ 9 Jun 2011, 07:58) *
Bonjour Ipolis,

Comme le disait Guijuilefou hier:
Citation
Je vais à présent me concentrer sur les module checkout_payement et les optimisations graphiques.


IOSC v3.2b ne fonctionne pas non plus avec Paypal.

En effet mobile_checkout_payement semble ne pas contenir de <input type="hidden"> et ne transmet pas toutes les info nécessaire au paiement...



As tu regardé ici ?
http://www.oscommerce-fr.info/forum/index.php?s=&showtopic=67383&view=findpost&p=353674

Écrit par : Guijuilefou 10 Jun 2011, 23:07

Salut Oneill,

Merci pour la piqûre de rappel sur ton post wink.gif

Effectivement tu as parfaitement expliqué le problème du mobile_checkout_payment.
Je comptais d'ailleurs me baser sur ton diagnostic pour attaquer mais je n'ai malheureusement pas encore eu le temps de toucher à cette partie.

Bonne soirée

Écrit par : jeanflo 28 Jun 2011, 15:26

Citation (oneill @ 5 Feb 2011, 17:27) *
SystemPay/Cyberplus fonctionne sur Iosc3
La page de paiement est celle qu'on connait bien sur. On attends la version Smartphone.

Dans mobile_checkout_confirmation.php
Après
Code
<?php
  if (isset($$payment->form_action_url)) {
    $form_action_url = $$payment->form_action_url;
  } else {
    $form_action_url = tep_mobile_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
  }
?>
<div id="iphone_content">
<?php
  echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');

  if (is_array($payment_modules->modules)) {
    echo $payment_modules->process_button();
  }
Ajoutez
Code
  if (isset($$payment->form_submit)) {
    $form_submit = $$payment->form_submit;
  }
?>
<div id="iphone_content">
<?php
  echo tep_draw_form('checkout_confirmation', $form_submit, 'post');
?>


Tada !


Merci pour cette magnigfique contribution.

J'ai fait la modif suggérée par Oneil, modif qui fonctionne d'ailleurs sur ma boutique classique (cf. ci-dessous), mais pas moyen d'afficher les logo des CB (j'utilise Mercanet), pourtant je vois bien le message disant (cliquez sur le logo de votre carte bancaire)
Une idée ?

Code
<div id="bouton">
      <!--<input type="submit" value="<?php echo IMAGE_BUTTON_CONFIRM_ORDER; ?>">-->
            <input type="checkbox" value="0" name="agree">
                <?php echo CONDITION_AGREEMENT; ?>
                <br>
                <br>
                <?php    if (isset($$payment->form_submit)) {
                        $form_submit = $$payment->form_submit;
                      } else {
                        $form_submit = tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER);
                      }
                        echo $form_submit . '</form>' . "\n";
                ?>    
      </div>


Comme le dit Garga, cela provient surement du
Citation
En effet mobile_checkout_payement semble ne pas contenir de <input type="hidden"> et ne transmet pas toutes les info nécessaire au paiement...

Écrit par : jeanflo 29 Jun 2011, 09:09

Citation (ipolis @ 9 Jun 2011, 00:08) *
Cependant,
lors du choix de paiement par CB :
J'ai systématiquement un :
1) Paiement en phase de test qui s'affiche sur la version mobile (tout est FULL ok sur la version classique)
2) Puis un retour AUTO sur la page mobile_index.php


Pour le point 1,
C'est juste 1 code en dur
Code
<h2>ATTENTION ! Version bêta, les paiements par carte bancaire ne sont pas fonctionnels.</h2>
qu'il faut enlever dans mobile_checkout_payment.

Très bon boulot Guijuilefou, smile.gif
Je test actuellement la version iOSC3_3b_FULL_20110608 qui fonctionne très bien, mis à par l'ajustement atos que je n'arrive pas à solutionner moi même.

Cordialement

Écrit par : dmoynihan 2 Jul 2011, 10:16

Merci beaucoup pour cette contribution. Paypal fonctionne très bien avec la ligne 95 fixer dans checkout_payment mentionné dans le forum anglais. Je vais avoir un problème à montrer les sous-catégories. Ayez beaucoup d'entre eux.

/ Excusez-moi, mon français n'est pas très bon, mais peut lire Google translate raisonnablement bien ...

Écrit par : jeanflo 8 Jul 2011, 12:31

Citation (dmoynihan @ 2 Jul 2011, 11:16) *
Merci beaucoup pour cette contribution. Paypal fonctionne très bien avec la ligne 95 fixer dans checkout_payment mentionné dans le forum anglais. Je vais avoir un problème à montrer les sous-catégories. Ayez beaucoup d'entre eux.

/ Excusez-moi, mon français n'est pas très bon, mais peut lire Google translate raisonnablement bien ...


dmoynihan fait allusion à cet article : http://forums.oscommerce.com/topic/327785-contribution-iosc-mobile-version-of-osc-on-your-iphone/page__hl__mobile_checkout_payment__st__420

Pour le moment je n'ai pas encore réussi à faire fonctionne le module atos.


Écrit par : samsayah 25 Jul 2011, 19:08

Une idée de comment désactiver l'URL rewriting pour les pages mobiles ?

Parce que du coup, dès les premiers liens, les fiches produits et listes catégories sont celles du site Classique et ne repassent en mobile que pour le panier sad.gif

Je me doute que ce doit être dans le htaccess ou ailleurs, là je galère un peu

Écrit par : neji 29 Jul 2011, 16:33

salut,

Pour ma part, le htaccess n'a jamais fonctionné pour les pages mobiles. (j'ai pas vraiment cherché a comprendre ...)

Tu n'aurais pas un template qui posera un problème sur ses pages la ? (j'ai eu un cas similaire au tout début pour accèder à la version mobile, j'avais du bidouiller mon template pour que tout fonctionne niquel)

Écrit par : telede 29 Jul 2011, 17:05

Citation (neji @ 29 Jul 2011, 16:33) *
Pour ma part, le htaccess n'a jamais fonctionné pour les pages mobiles.

Pardon ?

Le .htaccess c'est du natif Apache blink.gif

C'est même compatible avec un autoradio, ou un lecteur dvd dans l'absolu ...

D'ailleurs pour être constructif, utilise les termes apache + htaccess + mobile sur google et tu verras le nombre infini de possibilités...

Écrit par : neji 2 Aug 2011, 16:27

Pour le reste du site il fonctionne correctement, il doit juste y avoir un conflit avec une autre règle, mais je n'ai pas eu le temps de chercher pour le moment ... Et mon post était pour aiguiller vers d'autres possibilités qu'une erreur htaccess

Écrit par : oneill 6 Sep 2011, 13:51

Juste en clin d'oeil

Code
//gps system
LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
LocationListener gpsListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        //TODO : faire quelques choses avec les nouvelles coordonnées
    }

    @Override
    public void onProviderDisabled(String arg0) {
    }

    @Override
    public void onProviderEnabled(String arg0) {
    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    }            
};
        
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
        
locationManager.requestLocationUpdates(locationManager.getBestProvider(criteria, true), 100, 1, gpsListener);


Ou comment récupérer les coordonnées GPS du mobile d'un visiteur (Android dans cet exemple) au moment où la personne consulte votre site.

La c'est pour BlackBerry
Code
<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>GPS Testing</title>
    </head>
    <body>
        <script type="text/javascript">
var modeCellsite   = 0;
var modeAssisted   = 1;
var modeAutonomous = 2;
function locationChanged()
{
    alert("Lat " + blackberry.location.latitude +
        " Lon " + blackberry.location.longitude +
        " Time " + blackberry.location.timestamp );
    return true;
}
if ( window.blackberry && blackberry.location.GPSSupported )
{
    var isUpdated = false;
    var theCount = 0;
    alert("Location tracking is supported");
    blackberry.location.onLocationUpdate("locationChanged()");
    blackberry.location.setAidMode(modeAutonomous);
    while ( theCount++ < 10 && !isUpdated )
        isUpdated = blackberry.location.refreshLocation();
}
else
{
    document.write("Location tracking is not supported");
}
        </script>
    </body>
</html>




Et ben !

Écrit par : Guijuilefou 30 Sep 2011, 22:07

Bonsoir à tous,

Tout d'abord veuillez m'excuser pour cette longue période sans nouvelle. J'ai pas mal été pris ces temps-ci (vacances + changement de poste)
Bref, j'ai eu pas mal de mail pour m'encourager : merci à tous !... Et pas mal de mails pour me remonter de bug sad.gif

Apparemment, quelques bugs subsistent sur le switch mobile / classique.

Si vous avez des infos : si vous rencontrez le bug et si oui comment reproduire le bug, je suis preneur.

Il reste aussi quelques autres bugs mineurs liés à quelques valeurs de variables hard-codées :

1°) Non prise en compte des osc installé dans un sous-répertoire :

Code
if (isset($HTTP_GET_VARS['view']) && $HTTP_GET_VARS['view'] == 'classic')
    {
        $view_type = 'classic';
        header("location:/index.php");
    }

I changed manually to :

if (isset($HTTP_GET_VARS['view']) && $HTTP_GET_VARS['view'] == 'classic')
    {
        $view_type = 'classic';
        header("location:/sklep/catalog/index.php");
    }


Il faut donc passer par la variable globale osc pour le path relatif vers le catalogue.

2°) Nettoyage des messages qui font peur dans le checkout payment :

Code
<h2>ATTENTION ! Version bêta, les paiements par carte bancaire ne sont pas fonctionnels.</h2>


Par contre si quelqu'un est chaud pour continuer le travail sur le checkout je suis preneur car je n'ai pas une minute de libre en ce moment sad.gif

Bonne soirée

Guillaume

Écrit par : mykiki_1 3 Oct 2011, 20:05

voila j'ai fait toute les manipulation qu'il m'était indiqué pour pouvoir voir mon site iphonisé, mais cela ne fonctionne pas à la place j'ai un message d'erreur.

Si qqun peut m'aider a comprendre le problème.

Écrit par : mykiki_1 5 Oct 2011, 13:21

J'ai finalement réussi a l'installer, c'est magnifique super travaille.
Bon ya encore quelque petit bug à arranger, autrement super.
à bientot.

Écrit par : mykiki_1 10 Oct 2011, 21:04

Bonjour a tous, j'ai installer cette super contribution pour mobile a mon oscommerce.
Seul problème le chekout, je sait que je ne suis pas le premier à le dire, mais peut être que quelqu'un en sait plus svp aider cette contribution est tout simplement super et j'aimerai que mes clients en profite pleinement.
Suis je le seul qui n'arrive pas a passer la commande jusqu'a la fin ???
Que quelqu'un me réponde svp!!!

Écrit par : cebb 12 Dec 2011, 11:18

Bonjour à tous,
j'ai installer la contribution iosc3,
j'ai un problème de détection des navigateurs,
il switch systématiquement sur la version mobile, Firefox / IE / chrome
j'ai installé la dernière : addons.oscommerce.com/info/7636

avez vous un conseil ??
merci d'avance..

Écrit par : mykiki_1 16 Jan 2012, 20:17

Salut a tous qqun a du new pour les checkout payment ???
je n'arrive toujours pas a passer les cartes de credits ou meme paypal et j'ai un probleme aussi qui s'affiche lorsque je rajoute un article dans mon panier j'ai le message d'erreur suivant :
" FATAL error: call to undefined method payment::chekout_initialization_method() in /home/mon site/www/catalog/mobile_shopping_cart.php on line 160 ".

Je vous en suppli un petit coup de main SVP, j'en ai vraiment besoin !!!!!!!!!! J'en ai vraiment besoin je veux que ce module fonctionne !!!!!

Écrit par : oneill 17 Jan 2012, 17:12

Colles moi ici ton mobile_checkout_confirmation.php

Et pour ton mobile_shopping_cart.php ligne 161 sur la dernière version et chez toi surement ligne 160, la ligne qui pose problème est commentée. Fais en autant.

Code
    //$initialize_checkout_methods = $payment_modules->checkout_initialization_method();

Écrit par : mykiki_1 17 Jan 2012, 20:05

Voici mon mobile checkout_confirmation.php :

Code
<?php
require_once('mobile/includes/application_top.php');

// if the customer is not logged on, redirect them to the login page
  if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
    tep_redirect(tep_mobile_link(FILENAME_LOGIN, '', 'SSL'));
  }

// if there is nothing in the customers cart, redirect them to the shopping cart page
  if ($cart->count_contents() < 1) {
    tep_redirect(tep_mobile_link(FILENAME_SHOPPING_CART));
  }

// avoid hack attempts during the checkout procedure by checking the internal cartID
  if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
    if ($cart->cartID != $cartID) {
      tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
    }
  }

// if no shipping method has been selected, redirect the customer to the shipping method selection page
  if (!tep_session_is_registered('shipping')) {
    tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
  }

  if (!tep_session_is_registered('payment')) tep_session_register('payment');
  if (isset($HTTP_POST_VARS['payment'])) $payment = $HTTP_POST_VARS['payment'];

  if (!tep_session_is_registered('comments')) tep_session_register('comments');
  if (tep_not_null($HTTP_POST_VARS['comments'])) {
    $comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
  }

// load the selected payment module
  require(DIR_WS_CLASSES . 'payment.php');
  $payment_modules = new payment($payment);

  require(DIR_WS_CLASSES . 'order.php');
  $order = new order;

  $payment_modules->update_status();

  if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
    tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
  }

  if (is_array($payment_modules->modules)) {
    $payment_modules->pre_confirmation_check();
  }

// load the selected shipping module
  require(DIR_WS_CLASSES . 'shipping.php');
  $shipping_modules = new shipping($shipping);

  require(DIR_WS_CLASSES . 'order_total.php');
  $order_total_modules = new order_total;
  $order_total_modules->process();

// Stock Check
  $any_out_of_stock = false;
  if (STOCK_CHECK == 'true') {
    for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
      if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
        $any_out_of_stock = true;
      }
    }
    // Out of Stock
    if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
      tep_redirect(tep_mobile_link(FILENAME_SHOPPING_CART));
    }
  }

  require(DIR_WS_LANGUAGES . $language . '/checkout_confirmation.php');

  $breadcrumb->add(NAVBAR_TITLE_1, tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
  $breadcrumb->add(NAVBAR_TITLE_2);

    require(DIR_MOBILE_INCLUDES . 'header.php');
    $headerTitle->write();
?>
<?php
  if (isset($$payment->form_action_url)) {
    $form_action_url = $$payment->form_action_url;
  } else {
    $form_action_url = tep_mobile_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
  }

  echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
?>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
  if (is_array($payment_modules->modules)) {
    if ($confirmation = $payment_modules->confirmation()) {
?>
      <tr>
        <td class="main"><b><?php echo HEADING_PAYMENT_INFORMATION; ?></b></td>
      </tr>
      <tr>
        <td>
            <table border="0" cellspacing="0" cellpadding="2">
              <tr>
                <td class="main" colspan="4"><?php echo $confirmation['title']; ?></td>
              </tr>
<?php
      for ($i=0, $n=sizeof($confirmation['fields']); $i<$n; $i++) {
?>
              <tr>
                <td class="main"><?php echo $confirmation['fields'][$i]['title']; ?></td>
                <td class="main"><?php echo $confirmation['fields'][$i]['field']; ?></td>
              </tr>
<?php
      }
?>
                </table>
        </td>
      </tr>
<?php
    }
  }
?>
      <tr class="categories">
        <td class="main" style="padding: 5px;"><input type="submit" value="<?php echo IMAGE_BUTTON_CONFIRM_ORDER; ?>"></td>
      </tr>
      <tr>
        <td><hr class="separator"></td>
      </tr>
      <tr>
        <td>
            <table border="0" cellspacing="0" cellpadding="2">
<?php
  if (MODULE_ORDER_TOTAL_INSTALLED) {
    echo $order_total_modules->output();
  }
?>
            </table>
        </td>      
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_PAYMENT_METHOD . '</b>' .  '&nbsp;&nbsp;<a href="' . tep_mobile_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo $order->info['payment_method']; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_BILLING_ADDRESS . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, ' ', '<br>'); ?></td>
      </tr>
<?php
    if ($sendto != false) {
        if ($order->info['shipping_method']) {
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_SHIPPING_METHOD . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo $order->info['shipping_method']; ?></td>
      </tr>
<?php
        }
?>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_DELIVERY_ADDRESS . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, ' ', '<br>'); ?></td>
      </tr>
<?php
    } // end of if ($sendto != false)
?>
<!-- cart -->
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
              <tr>
                <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
  if (sizeof($order->info['tax_groups']) > 1) {
?>
                  <tr>
                    <td class="main" colspan="2"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_mobile_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
                    <td class="smallText" align="right"><b><?php echo HEADING_TAX; ?></b></td>
                    <td class="smallText" align="right"><b><?php echo HEADING_TOTAL; ?></b></td>
                  </tr>
<?php
  } else {
?>
                  <tr>
                    <td class="main" colspan="3"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_mobile_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
                  </tr>
<?php
  }

  for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
    echo '          <tr>' . "\n" .
         '            <td class="main" align="right" valign="top" width="30">' . $order->products[$i]['qty'] . '&nbsp;x</td>' . "\n" .
         '            <td class="main" valign="top">' . $order->products[$i]['name'];

    if (STOCK_CHECK == 'true') {
      echo tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty']);
    }

    if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
      for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
        echo '<br><nobr><small>&nbsp;<i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . '</i></small></nobr>';
      }
    }

    echo '</td>' . "\n";

    if (sizeof($order->info['tax_groups']) > 1) echo '            <td class="main" valign="top" align="right">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n";

    echo '            <td class="main" align="right" valign="top">' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . '</td>' . "\n" .
         '          </tr>' . "\n";
  }
?>
                </table></td>
              </tr>
<!-- end of cart -->
      <tr class="categories">
        <td class="main" style="padding: 5px;"><input type="submit" value="<?php echo IMAGE_BUTTON_CONFIRM_ORDER; ?>"></td>
      </tr>
      <tr><td><table width="100%"  cellspacing="0" cellpadding="0">
<?php echo     tep_mobile_selection(tep_mobile_link(FILENAME_SHOPPING_CART, '', 'SSL'), array(BOX_HEADING_SHOPPING_CART) ); ?>
      </table></td></tr>
    </table>
</form>
<?php require(DIR_MOBILE_INCLUDES . 'footer.php'); ?>




Merci a toi de bien vouloir m'aider c'est gentil, par contre j'ai pas trop pigee pour le comentaire de la ligne 160 ??
Que veut tu dire par commentee ??

sur la ligne 160 c'est ce que j'ai d'ecrit :

$initialize_checkout_methods = $payment_modules->checkout_initialization_method();

Merci encore !!

Écrit par : oneill 18 Jan 2012, 17:39

Voila ton nouveau fichier modifié.

Code
<?php
require_once('mobile/includes/application_top.php');

// if the customer is not logged on, redirect them to the login page
  if (!tep_session_is_registered('customer_id')) {
    $navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
    tep_redirect(tep_mobile_link(FILENAME_LOGIN, '', 'SSL'));
  }

// if there is nothing in the customers cart, redirect them to the shopping cart page
  if ($cart->count_contents() < 1) {
    tep_redirect(tep_mobile_link(FILENAME_SHOPPING_CART));
  }

// avoid hack attempts during the checkout procedure by checking the internal cartID
  if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
    if ($cart->cartID != $cartID) {
      tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
    }
  }

// if no shipping method has been selected, redirect the customer to the shipping method selection page
  if (!tep_session_is_registered('shipping')) {
    tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
  }

  if (!tep_session_is_registered('payment')) tep_session_register('payment');
  if (isset($HTTP_POST_VARS['payment'])) $payment = $HTTP_POST_VARS['payment'];

  if (!tep_session_is_registered('comments')) tep_session_register('comments');
  if (tep_not_null($HTTP_POST_VARS['comments'])) {
    $comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
  }

// load the selected payment module
  require(DIR_WS_CLASSES . 'payment.php');
  $payment_modules = new payment($payment);

  require(DIR_WS_CLASSES . 'order.php');
  $order = new order;

  $payment_modules->update_status();

  if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
    tep_redirect(tep_mobile_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
  }

  if (is_array($payment_modules->modules)) {
    $payment_modules->pre_confirmation_check();
  }

// load the selected shipping module
  require(DIR_WS_CLASSES . 'shipping.php');
  $shipping_modules = new shipping($shipping);

  require(DIR_WS_CLASSES . 'order_total.php');
  $order_total_modules = new order_total;
  $order_total_modules->process();

// Stock Check
  $any_out_of_stock = false;
  if (STOCK_CHECK == 'true') {
    for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
      if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
        $any_out_of_stock = true;
      }
    }
    // Out of Stock
    if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
      tep_redirect(tep_mobile_link(FILENAME_SHOPPING_CART));
    }
  }

  require(DIR_WS_LANGUAGES . $language . '/checkout_confirmation.php');

  $breadcrumb->add(NAVBAR_TITLE_1, tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
  $breadcrumb->add(NAVBAR_TITLE_2);

    require(DIR_MOBILE_INCLUDES . 'header.php');
    $headerTitle->write();
?>
<?php
  if (isset($$payment->form_action_url)) {
    $form_action_url = $$payment->form_action_url;
  } else {
    $form_action_url = tep_mobile_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
  }

  echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');


  if (is_array($payment_modules->modules)) {
    echo $payment_modules->process_button();
  }

  if (isset($$payment->form_submit)) {
    $form_submit = $$payment->form_submit;
  }

  echo tep_draw_form('checkout_confirmation', $form_submit, 'post');

?>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
  if (is_array($payment_modules->modules)) {
    if ($confirmation = $payment_modules->confirmation()) {
?>
      <tr>
        <td class="main"><b><?php echo HEADING_PAYMENT_INFORMATION; ?></b></td>
      </tr>
      <tr>
        <td>
            <table border="0" cellspacing="0" cellpadding="2">
              <tr>
                <td class="main" colspan="4"><?php echo $confirmation['title']; ?></td>
              </tr>
<?php
      for ($i=0, $n=sizeof($confirmation['fields']); $i<$n; $i++) {
?>
              <tr>
                <td class="main"><?php echo $confirmation['fields'][$i]['title']; ?></td>
                <td class="main"><?php echo $confirmation['fields'][$i]['field']; ?></td>
              </tr>
<?php
      }
?>
                </table>
        </td>
      </tr>
<?php
    }
  }
?>
      <tr class="categories">
        <td class="main" style="padding: 5px;"><input type="submit" value="<?php echo IMAGE_BUTTON_CONFIRM_ORDER; ?>"></td>
      </tr>
      <tr>
        <td><hr class="separator"></td>
      </tr>
      <tr>
        <td>
            <table border="0" cellspacing="0" cellpadding="2">
<?php
  if (MODULE_ORDER_TOTAL_INSTALLED) {
    echo $order_total_modules->output();
  }
?>
            </table>
        </td>      
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_PAYMENT_METHOD . '</b>' .  '&nbsp;&nbsp;<a href="' . tep_mobile_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo $order->info['payment_method']; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_BILLING_ADDRESS . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo tep_address_format($order->billing['format_id'], $order->billing, 1, ' ', '<br>'); ?></td>
      </tr>
<?php
    if ($sendto != false) {
        if ($order->info['shipping_method']) {
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_SHIPPING_METHOD . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo $order->info['shipping_method']; ?></td>
      </tr>
<?php
        }
?>
      <tr>
          <td class="main"><?php echo '<b>' . HEADING_DELIVERY_ADDRESS . '</b> <a href="' . tep_mobile_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
      </tr>
      <tr>
          <td class="main"><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, ' ', '<br>'); ?></td>
      </tr>
<?php
    } // end of if ($sendto != false)
?>
<!-- cart -->
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '2'); ?></td>
      </tr>
              <tr>
                <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
  if (sizeof($order->info['tax_groups']) > 1) {
?>
                  <tr>
                    <td class="main" colspan="2"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_mobile_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
                    <td class="smallText" align="right"><b><?php echo HEADING_TAX; ?></b></td>
                    <td class="smallText" align="right"><b><?php echo HEADING_TOTAL; ?></b></td>
                  </tr>
<?php
  } else {
?>
                  <tr>
                    <td class="main" colspan="3"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_mobile_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
                  </tr>
<?php
  }

  for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
    echo '          <tr>' . "\n" .
         '            <td class="main" align="right" valign="top" width="30">' . $order->products[$i]['qty'] . '&nbsp;x</td>' . "\n" .
         '            <td class="main" valign="top">' . $order->products[$i]['name'];

    if (STOCK_CHECK == 'true') {
      echo tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty']);
    }

    if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
      for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
        echo '<br><nobr><small>&nbsp;<i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . '</i></small></nobr>';
      }
    }

    echo '</td>' . "\n";

    if (sizeof($order->info['tax_groups']) > 1) echo '            <td class="main" valign="top" align="right">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n";

    echo '            <td class="main" align="right" valign="top">' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . '</td>' . "\n" .
         '          </tr>' . "\n";
  }
?>
                </table></td>
              </tr>
<!-- end of cart -->
      <tr class="categories">
        <td class="main" style="padding: 5px;"><input type="submit" value="<?php echo IMAGE_BUTTON_CONFIRM_ORDER; ?>"></td>
      </tr>
      <tr><td><table width="100%"  cellspacing="0" cellpadding="0">
<?php echo     tep_mobile_selection(tep_mobile_link(FILENAME_SHOPPING_CART, '', 'SSL'), array(BOX_HEADING_SHOPPING_CART) ); ?>
      </table></td></tr>
    </table>
</form>
<?php require(DIR_MOBILE_INCLUDES . 'footer.php'); ?>


Pour le reste et je vais jouer les vieux emmerdeurs, mais tu ne sais pas ce qu'est une ligne de code commentée ? Et tu lances dans osc ?
Faut un minimum requis quand même. Voila ca c'est dit...

Donc pour commenter une ligne il faut mettre // devant la code soit exactement comme je t'ai mis la ligne en question. Mieux, tu l'effaces.

Pour remplacer ton code en entier de mobile checkout_confirmation.php tu vas y arriver ?


Je n'ai pas la même structure de page que toi. J'ai des <DIV> et non des <TABLE>. Je ne sais pas pourquoi on a régressé au niveau des versions !!

Écrit par : mykiki_1 18 Jan 2012, 18:43

Alors toi tu est au top !!!
Je t'envoie une benediction lol !
je vais esseyer des que je rentre du boulot !
Je te tiens au courant, merci mille fois de ta reponse sa fait lontemps que j'attendais un petit coup de main !!

Écrit par : mykiki_1 19 Jan 2012, 19:31

Salut Oneill,

Alors pour la ligne 160 le pb a effectivement disparue quand je met le commentaire; soit // lol !

Par contre quand je click sur valide la commande j'ai le message d'erreur suivant:

Code
Warning: str_repeat() [function.str-repeat]: Second argument has to be greater than or equal to 0 in /home/isranet/www/catalog/includes/modules/payment/cc.php on line 173

Warning: Cannot modify header information - headers already sent by (output started at /home/isranet/www/catalog/includes/modules/payment/cc.php:173) in/home/isranet/www/catalog/includes/functions/general.php on line 29



Que faire ??



Écrit par : mykiki_1 25 Jan 2012, 09:34

Salut Oneill, Stp fait moi signe c'est le dernier probleme que j'ai dans ma version mobile, je c'est pas si c'est chiant a regler ou pas, que me conseille tu ?

help me please !

Écrit par : mykiki_1 25 Jan 2012, 09:41

Voici mon fichier cc.php ligne 173 :

Code
$order->info['cc_number'] = substr($HTTP_POST_VARS['cc_number'], 0, 4) . str_repeat('X', (strlen($HTTP_POST_VARS['cc_number']) - 8)) . substr($HTTP_POST_VARS['cc_number'], -4);



et le fichier general.php ligne 29 :



Code
header('Location: ' . $url);


faut il changer qqch ?

Écrit par : oneill 25 Jan 2012, 10:10

La lecture de la FAQ fait parti des requis que je citais plus haut

http://www.oscommerce-fr.info/faq/qa_info.php?qID=35

Écrit par : oneill 25 Jan 2012, 11:18

Désactive le module de paiement cc.php qui ne te sert à rien !

Je suis désolé mais je ne pourrais continuer à t'aider dans ces conditions. Tout ce que tu demandes est dans le forum. Le code que j'ai utilisé pour te dépanner plus haut est bien de moi mais il est déjà cité dans ce même post. Il te suffit juste de lire et de recopier...
Si tu n'y arrives pas, formes toi (c'est pas si difficile que ca) ou prends un prestataire. Je ne peux, décemment pas, faire le travail à ta place ou piquer le boulot d'un pro.

Inutile de me sortir les violons ou le calibre 12, j'ai déjà tout entendu à propos des requis.
http://www.oscommerce-fr.info/forum/index.php?showtopic=58551

Écrit par : mykiki_1 25 Jan 2012, 12:34

Bon je sait que tu est en colere parce que je suis debutant, mais bon c'est quand meme cool de ta part mes soucci on disparu.

Question a par entiere, sait-tu si netpay ( je sais pas si tu connais ) install eux meme leur module carte de credit ou bien c'est a nous de l'installer
Cette fois ci pas d'explication juste une reponse apres je me debrouille

et encore merci mon gars !!!

Écrit par : Team SPL 19 Feb 2012, 23:53

Bonsoir,
j'ai voulu mettre dans un dossier tous les mobile_*.php de iOSC3 comme à l'origine avec iOSC Mobile v1.0 de bumbarash (http://addons.oscommerce.com/info/6529) afin que je puisse ne pas les mélanger avec les autre pages de la version classique et que je puisse mettre la version mobile en sous domaine (m.maboutique.com) mais impossible, j'ai essayer mais j'y suis pas arrivé, help me please unsure.gif

Écrit par : Team SPL 25 Feb 2012, 10:44

Re,
J'ai un autre souci aussi, j'ai pas la redirection sur la page de paiement PayPal, ça va que sur la page d'accueil de compte PayPal

Écrit par : fhuet08 31 Mar 2012, 08:05

bonjour à tous ! super contrib !! mais juste un soucis ...
la version mobile n'aime pas les accents ! ...
une petite solution ?

Écrit par : oneill 31 Mar 2012, 08:27

Citation (Team SPL @ 19 Feb 2012, 23:53) *
Bonsoir,
j'ai voulu mettre dans un dossier tous les mobile_*.php de iOSC3 comme à l'origine avec iOSC Mobile v1.0 de bumbarash (http://addons.oscommerce.com/info/6529) afin que je puisse ne pas les mélanger avec les autre pages de la version classique et que je puisse mettre la version mobile en sous domaine (m.maboutique.com) mais impossible, j'ai essayer mais j'y suis pas arrivé, help me please unsure.gif

Il faut juste reprendre les chemins de configuration.php non ? Un peu comme /catalog/



Citation (Team SPL @ 25 Feb 2012, 10:44) *
Re,
J'ai un autre souci aussi, j'ai pas la redirection sur la page de paiement PayPal, ça va que sur la page d'accueil de compte PayPal

Par contre, Paypal s'est mis installé "tout seul" pour ainsi dire. Seul bémol : Paypal Express est compatible avec l'affichage des Smartphones par détection (pas pour Opéra !) mais pas Paypal Integral Evolution.



Citation (fhuet08 @ 31 Mar 2012, 08:05) *
bonjour à tous ! super contrib !! mais juste un soucis ...
la version mobile n'aime pas les accents ! ...
une petite solution ?

Pas de soucis particulier la dessus... Quel genre de soucis ?

Écrit par : fhuet08 31 Mar 2012, 08:36

http://www.hostingpics.net/viewer.php?id=804847Sanstitre.png

voilà... mais ça me le fait uniquement sur la version mobile.
et autre petite chose quand je veux changer les couleur dans mobile.css ca ne me change rien. (ca à la limite pas trop grave je vais continuer à chercher là dessus)

Écrit par : oneill 31 Mar 2012, 08:41

Dans tes dossiers de langage /french/ les "é" ont-ils cette forme "&eacute;" ?

Écrit par : fhuet08 31 Mar 2012, 08:49

non c'est des "é" "à" etc.. (includes/languages/french.php = UTF8 et dans ./mobile/includes/header.php c'est )

edit : problème reglé... j'ai remplacé dans ./mobile/includes/header.php
la ligne

Code
<meta http-equiv="Content-Type"
   content="text/html; charset=iso-8859-1" />

par
Code
<meta http-equiv="Content-Type"
   content="text/html; charset=utf-8" />


désolé ca faisait un bon moment que je cherchait et évidement c'est au moment où je demande de l'aide que je trouve ...

Écrit par : oneill 31 Mar 2012, 09:03

smile.gif

Écrit par : fhuet08 31 Mar 2012, 11:27

fausse joie ! :/ je me retrouve avec un jolie

Fatal error: Call to undefined function: tep_show_view_selector_classic_view() in /mnt/153/sdb/6/5/monsite/includes/footer.php

et également un soucis pour passer du site mobile au classic. il me renvois sur le site mobile

Écrit par : mickael34 4 Jan 2013, 09:34

Bonjour,

Je remonte ce post de cette excellente contribution (dont je remercie les auteurs !).

J'ai installé cette contrib sur ma ms2.2.
J'arrive même à la faire fonctionner avec Order Check (commandes perdues) et QT Pro (gestion du stock par attributs).

Tout à l'air ok, depuis mon mobile je suis bien redirigé vers la version mobile.
Si je passe commande "sans sortir" du site (paiement par virement ou chèque), là aussi tout est ok, ma commande est bien prise en compte.

Mon problème est quand j'essaye de payer par CB via SystemPay !
J'arrive bien sur SystemPay (en version mobile), je rentre mon numéro de CB et ensuite, je reviens sur la page mobile_checkout_payment avec comme message d'erreur : Votre paiement n'a pas pu être confirmé.

Sauf que côté SystemPay, mon paiement est bien passé et la CB est bien débitée !

C'est donc mon retour après mon paiement SystemPay qui n'est pas bon !

Si je test depuis mon mobile, en payant par CB sur mon site classique, par contre là c'est bon.

J'ai donc, je pense, un pb avec mon mobile_checkout_confirmation ou mon mobile_checkout_process ou la configuration de mon module SystemPay peut-être !
J'ai essayé les dernières version de la contrib, les modifs d'Oneill plus haut dans ce post mais idem.

Le support SystemPay n'a pas pu m'aider.

Est-ce que quelqu'un a déjà réussi à faire fonctionner correctement IOSC et SystemPay ?
smile.gif

Écrit par : oneill 4 Jan 2013, 10:50

Ta boutique tourne sous Php 5 ou php 4 ?

Écrit par : mickael34 4 Jan 2013, 11:04

sous php4
je sais c'est mal... smile.gif

Écrit par : oneill 4 Jan 2013, 12:30

Pour le coup non, ca ne vient donc pas de ce que pensais....

Écrit par : mickael34 4 Jan 2013, 14:22

Mince...

Ce qui étonnant c'est que le service technique de SystemPay me dit que lorsqu'ils essayent de "tracer" mon paiement, ils ne remarquent rien d'anormal par rapport à un paiement depuis le site classique.
Et me disent même que mon paiement depuis le site mobile est passé par la page checkout_process.php selon eux !!!!

Bizarre, d'autant que depuis le site mobile, en payant par Paypal, c'est ok, j'arrive sur la version mobile de paypal, je paye, mon paiement est enregistré et ma commande également...

Pensez-vous qu'il est possible de "masquer" des modules de paiement sur la page mobile_checkout_payment.php alors que ces derniers seraient bien activés côté admin ?
Parce que dans le pire des cas, je ne proposerai pas le paiement par CB via SystemPay sur le mobile...

Écrit par : mickael34 15 Jan 2013, 11:26

Bonjour,

Je reviens toujours avec mes soucis de paiement par SystemPay...

En fait le service technique de SystemPay me dit que c'est leur module qui n'est pas adapté à la façon dont fonctionne cette contrib (redirections vers des pages mobiles).

Et me disent même qu'ils n'ont aucun clients, toutes plateformes ecommerce confondues, qui utilisent SystemPay sur un site classique avec version mobile placé dans un répertoire différent !
Sous entendu, il faudrait obligatoirement passer par du full css et ne faire aucunes redirections vers des pages mobiles...

Bizarre mais bon.

Mes tests :

- sur mobile (sous android) --> commande via le site classique --> paiement et commande via systempay ok
- sur mobile (sous android) --> commande via le site mobile --> paiement "sans sortie" par virement ou chèque ok
- sur mobile (sous android) --> commande via le site mobile --> paiement par systempay --> message d'erreur : votre paiement n'a pas pu être confirmé !

Mon paiement est pourtant bien enregistré dans systempay mais ma commande n'est pas présente dans mon admin (normal car pas passé par process).


Je me dit donc, que c'est peut-être la redirection vers mobile_checkout_process.php qui chie.

En effet, Mon module SystemPay, à la fin de mon paiement, essaye de me renvoyer sur checkout_process.php qui lui même doit être rediriger (je pense) vers mobile_checkout_process.php.


Une alternative possible à mon problème :
Malgré le fait que mon site mobile soit "activé" (et donc avec toutes les redirections vers les pages mobiles qui vont avec...), "empêcher" la page chechout_process.php d'être redirigée.

J'aurais ainsi :
- si commande "sans sortie" du site --> alors procédure normale en passant par mobile_checkout_process.php puis mobile_chechout_success.php
- si commande via un module externe bancaire ou paypal configurés pour un retour sur checkout_process.php --> alors on revient sur le site mobile via checkout_process.php comme sur le site classique.
J'évite donc ainsi la redirection de la page checkout_process.php


Si ma technique est possible :
Si "site mobile" activé et si "page checkout_process" est appelée alors pas de redirection, on reste sur "checkout_process"

Je pense que ça doit pouvoir s'écrire dans le code placé dans includes/application_top.php :

Code
//BEGIN : MOBILE iOSC REDIRECT_SCRIPT    
    if (MOBILE_SITE=='True'){
            $url_basename = basename($PHP_SELF);
            if ($url_basename == 'index.php')  {
                            if (strpos($_SERVER['REQUEST_URI'], 'cPath=') == FALSE) {
                                    $mobile_site = 'mobile_index.php';  
                            } else {
                                    $info_box_replace = array('infoBox=0&', 'infoBox=1&', 'infoBox=2&', 'infoBox=3&', 'infoBox=4&', 'infoBox=5&', 'infoBox=6&', 'infoBox=7&', 'infoBox=8&', 'infoBox=9&');
                                    $url = str_replace($info_box_replace, '', $_SERVER['REQUEST_URI']);
                                    $url_category_ids = str_replace('cPath=', '', strrchr ($_SERVER['REQUEST_URI'] , 'cPath='));
                                    $url_category_id = (strpos($url_category_ids,'_') > 0) ? str_replace('_', '', strrchr ($_SERVER['REQUEST_URI'] , '_')) : str_replace('cPath=', '', strrchr ($_SERVER['REQUEST_URI'] , 'cPath='));
                                    $url = str_replace($url_category_ids, '', $url);
                                   $mobile_site = str_replace('index.php', 'mobile_catalogue.php', $url) . $url_category_id;
                            }
                    }
                    if ($mobile_site == DIR_WS_HTTP_CATALOG){
                            $mobile_site .= 'mobile_index.php';
                    }                            
            
    if ($url_basename == 'featured_products.php') {
                        $mobile_site = str_replace('featured_products.php', 'mobile_index.php', $_SERVER['REQUEST_URI']);
        }    

    if ($url_basename == 'recently_viewed.php') {
                        $mobile_site = str_replace('recently_viewed.php', 'mobile_index.php', $_SERVER['REQUEST_URI']);
        }    

    if (SHOW_MANUFACTURERS_SEARCH_MENU == 'false' && SHOW_CATEGORIES_SEARCH_MENU == 'false' && SHOW_SEARCH_BY_PRICE_RANGE == 'false' && SHOW_SEARCH_BY_DATE_RANGE && 'false') {
        if ($url_basename == 'advanced_search.php') {
                            $mobile_site = str_replace('advanced_search.php', 'mobile_search.php', $_SERVER['REQUEST_URI']);
            }    
    }    

        if(isset($mobile_site)) {
            $mobile_url = $mobile_site;
        } else {
            $mobile_url = $_SERVER['REQUEST_URI'];
            $url_pagename = basename($PHP_SELF);
            $mobile_url = str_replace($url_pagename, 'mobile_' . $url_pagename, $mobile_url);
        }

    define(DIR_MOBILE_CLASSES , 'mobile/includes/classes/');
    require(DIR_MOBILE_CLASSES . 'mobile_redirect.php');
    $mobileRedirect = new mobileRedirect;
    }
//END : MOBILE iOSC REDIRECT_SCRIPT


Je sais pas si ma demande est très claire, c'est super précis mais ça peut me sauver la mise !

Écrit par : oneill 15 Jan 2013, 14:28

Citation (mickael34 @ 4 Jan 2013, 14:22) *
Pensez-vous qu'il est possible de "masquer" des modules de paiement sur la page mobile_checkout_payment.php alors que ces derniers seraient bien activés côté admin ?
Parce que dans le pire des cas, je ne proposerai pas le paiement par CB via SystemPay sur le mobile...


Pour le pire des cas, voici ce que j'ai fais pour sélectionner les modules sur le mobile

Dans le includes/functions/general.php créer la fonction

Code
// Le navigateur est-il un Smartphone ?
   function smartphone() {
   $smartphone = false;
    if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone") || strpos($_SERVER['HTTP_USER_AGENT'], "iPod") || strpos($_SERVER['HTTP_USER_AGENT'], "iPad") || stristr($_SERVER['HTTP_USER_AGENT'], "Blackberry") || stristr($_SERVER['HTTP_USER_AGENT'], "Nokia") || stristr($_SERVER['HTTP_USER_AGENT'], "SonyEricsson") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mobi") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mini") || stristr($_SERVER['HTTP_USER_AGENT'], "MAUI_WAP_Browser") || stristr($_SERVER['HTTP_USER_AGENT'], "Android") || stristr($_SERVER['HTTP_USER_AGENT'], "SAMSUNG") || stristr($_SERVER['HTTP_USER_AGENT'], "Palm") || stristr($_SERVER['HTTP_USER_AGENT'], "IEMobile") || stristr($_SERVER['HTTP_USER_AGENT'], "Fennec") || stristr($_SERVER['HTTP_USER_AGENT'], "HTC") || stristr($_SERVER['HTTP_USER_AGENT'], "HTC_HD2_T8585")) {
   $smartphone = true;
}
     return $smartphone;
   }

C'est améliorable mais facile à faire.

Puis dans le module systempay, vads.php
Code
    if (smartphone() == true) {
         $this->enabled = false;
         }


Pendant que je t'écris ca je vois peut être quelque chose mais je suis plutôt charrette en temps en ce moment...

Écrit par : mickael34 15 Jan 2013, 16:10

Merci pour ton aide.

En fait, on pourrais alors imaginer de crééer des modules de paiement "fixes" et d'autres "mobiles".
En les masquant respectivement selon la provenance.

On pourrais alors dupliquer le module systempay.
Renseigner ce nouveau module avec les url de retour mobiles (mobile_checkout_process et mobile_checkout_success).
Masquer ce module sur la version classique du site tout en masquant le module systempay d'origine sur la version mobile.

Je ne suis pas certain que ça puisse marcher mais l'idée est à travailler.

Je vais quand même essayer de travailler sur le fait de rendre la page checkout_process.php "accessible" depuis le mobile même si la redirection mobile est activée.

A suivre...

Merci smile.gif

Écrit par : oneill 15 Jan 2013, 16:31

Pour les modules c'est exactement ce que je fais. Pour ceux qui sont sur les deux "interfaces", je modifie l'affichage. je ne sais comment c'est chez toi mais j'affiche les logos des cartes sur la boutique fixe et, forcément, sur un phone c'est pas possible ou beaucoup moins.
Dans ce cas, je fais donc comme suit :

Code
      $this->code        = 'chronopost';
      $this->title       = MODULE_SHIPPING_CHRONOPOST_TEXT_TITLE;
      $this->description = MODULE_SHIPPING_CHRONOPOST_TEXT_DESCRIPTION;
      $this->sort_order  = MODULE_SHIPPING_CHRONOPOST_SORT_ORDER;
if (smartphone() == true) {
      $this->help  = '';
      $this->icon  = '';
}else{
      $this->help  = '<a href="'. basename($PHP_SELF). '#" class="hintanchor" style="cursor: help;" onMouseover="showhint(\''. HELP_CHRONOPOST .'\', this, event, \'300px\')">[?]</a><br />';
      $this->icon        = DIR_WS_ICONS . 'logochrono24.gif';
}
      $this->poids = MODULE_SHIPPING_CHRONOPOST_ZONES_WEIGHT;
      $this->supplement = MODULE_SHIPPING_CHRONOPOST_ZONES_ADD;
      $this->tax_class   = MODULE_SHIPPING_CHRONOPOST_TAX_CLASS;
      $this->enabled     = ((MODULE_SHIPPING_CHRONOPOST_STATUS == 'True') ? true : false);

Où tout ce qui est aide ou logo ne s'affiche pas sur un mobile pour ce module Chronopost. C'est déclinable à souhait après.

Écrit par : mickael34 15 Jan 2013, 16:47

Très pratique effectivement comme petit bout de code !

Je vais essayer de regarder ça plus en détails notamment sur le module systempay et la variable "url_return".

Sur les conseils du technicien systempay qui me dit de déterminer dans le module si nous sommes ou non sur un mobile et si oui, de changer l'url_return : normalement checkout_process.php, en mobile_checkout_process.php.

A tester.

Merci smile.gif


Écrit par : mickael34 16 Jan 2013, 15:40

Oneill,

Aurais-tu une idée :

Je ne sais pas pourquoi mais quand je colle ta fonction dans mon général.php :

Code
// Le navigateur est-il un Smartphone ?
   function smartphone() {
   $smartphone = false;
    if (stristr($_SERVER['HTTP_USER_AGENT'], "iPhone") || strpos($_SERVER['HTTP_USER_AGENT'], "iPod") || strpos($_SERVER['HTTP_USER_AGENT'], "iPad") || stristr($_SERVER['HTTP_USER_AGENT'], "Blackberry") || stristr($_SERVER['HTTP_USER_AGENT'], "Nokia") || stristr($_SERVER['HTTP_USER_AGENT'], "SonyEricsson") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mobi") || stristr($_SERVER['HTTP_USER_AGENT'], "Opera Mini") || stristr($_SERVER['HTTP_USER_AGENT'], "MAUI_WAP_Browser") || stristr($_SERVER['HTTP_USER_AGENT'], "Android") || stristr($_SERVER['HTTP_USER_AGENT'], "SAMSUNG") || stristr($_SERVER['HTTP_USER_AGENT'], "Palm") || stristr($_SERVER['HTTP_USER_AGENT'], "IEMobile") || stristr($_SERVER['HTTP_USER_AGENT'], "Fennec") || stristr($_SERVER['HTTP_USER_AGENT'], "HTC") || stristr($_SERVER['HTTP_USER_AGENT'], "HTC_HD2_T8585")) {
   $smartphone = true;
}
     return $smartphone;
   }


Je n'ai plus accès au site mobile --> pages blanches !!!

Ca doit rentrer en conflit avec une autre fonction.

Dans mon general.php, concernant le mobile j'ai juste :

Code
  // BOF: mobile session
  function mobile_session() {
      if (strpos(basename($_SERVER['REQUEST_URI']), 'mobile_') !== false) {
              return true;
        }
  }
// EOF: mobile session


Plus le code dans application_top.php concernant les redirections.


Si tu as une idée, je suis preneur !

Écrit par : mickael34 16 Jan 2013, 16:25

Arf !!

Autant pour moi...
Ta fonction smartphone était déjà présente mais dans mon fichier mobile_redirect.php !

Pour la petite info, j'ai essayé de jouer sur l' "url_return" présente dans le module systempay.php :

Code
if (smartphone() == true) {
        $api->set('url_return', HTTP_SERVER.DIR_WS_CATALOG.'mobile_checkout_process.php');
}else{
        $api->set('url_return', HTTP_SERVER.DIR_WS_CATALOG.'checkout_process.php');
}



Mais apparament systempay essaye toujours de me renvoyer sur checkout_process.php et pas sur mobile_chekout_process.php... peut-être une erreur dans mon code...


La solution à mon problème passe donc par la duplication du module systempay en créant un systempay_mobile avec les url de retour mobile et en affichant/masquant les modules sur les bonnes plateformes.
Et là ça marchera à coup sur !


Merci Oneill




Écrit par : AL1 1 Jun 2013, 18:15

Bonsoir à tous,

Nous avons mis en place sur notre site (ms2) depuis quelques semaines cette version mobile
Celle-ci est parfaitement opérationnelle et en production.

Malheureusement, les clients nous ont rapportés qu'ils leur étaient impossibles de régler leur panier avec leur carte bancaire.

Nous avons 2 modules

PayPal Express Checkout
http://addons.oscommerce.com/info/7325/v,22

et Paypal ipn
http://addons.oscommerce.com/info/2679/v,22

NOTES IMPORTANTES : Ces deux modules sont parfaitement opérationnels sur le site « CLASSIQUE » et nous recevons parfaitement bien les règlements ainsi que les retours ipn.

Lors d'un paiement par mobile,
Le module paypal express checkout (ppeb), renvoie une erreur 404 (fichier non trouvé) ou (serveur saturé).
Le module Paypal IPN, renvoi sur https://www.paypal.com/home... Avec une image pleine page « paypal for android » etc. En fait paypal demande de télécharger l'application paypal.

Un autre client sur Iphone vient de nous rapporter qu'il est dirigé vers le site paypal Américain.

Quel module prendre pour que les clients arrivent sur la page ?
https://www.paypal.com/fr/cgi-bin/merchantpaymentweb

Malgré nos recherches et la réponse du service technique paypal (tout va bien)... Je ne trouve pas la solution....

Merci d'avance pour vos conseils

Alain

Écrit par : mickael34 17 Jun 2013, 10:47

Salut AL1, perso j'ai une version mobile sur mon site.
J'ai également comme module de paiement Paypal IPN et tout fonctionne correctement.
Pour que ça marche je n'ai rien eu à modifier côté Paypal ni côté de mon module de paiement !

Mon seul souci c'est que quand j'ai un paiement par Paypal depuis un mobile, le panier ne se vide pas (pas très grave) mais ça je sais pourquoi (pb de redirection automatique...).

Tes pb sont vraiment étranges.

Je te conseillerais de voir du côté du Forum US d'OsCommerce, il y a un topic sur cette contrib qui est bien suivi : http://forums.oscommerce.com/topic/327785-contribution-iosc-mobile-version-of-osc-on-your-iphone/


Écrit par : AL1 10 Jul 2014, 12:35

Un grand merci à Oneill, beaucoup, mais alors beaucoup trop tard... confused.gif??:

Je n'avais pas vu son excellent script pour cacher tel ou tel module selon l'interface... Et du coup pendant des mois le module paypal express retournait une erreur 404... sad.gif sur les mobiles..

Et là aujourd'hui, j'ai regardé par hasard si une solution avait été trouvé car sur les forum étrangers y compris US ont eu aussi ce bug mais pas la solution... Bingo! Le script fonctionne du premier coup, j'ai juste changer le nom de la fonction par "function portable" car l'autre était déjà prise... Résultat SUPER! j'ai le module paypal express et paypal ipn que s'affiche sur le site classique et uniquement paypal ipn sur le mobile, qui lui à toujours bien fonctionné....

ENCORE MERCI ONEILL!!!

Écrit par : oneill 10 Jul 2014, 17:53

wink.gif

Écrit par : AL1 24 Jul 2014, 14:52

Hello Tous,

Avidement comme vous n'êtes pas une brèle comme moi, vous n'allez pas oublier de mettre cette fonction aussi dans le general.php de l'admin, comme ça vous n'aurez pas ce message "Fatal error: Call to undefined function portable" hein? wink.gif

Alain

Écrit par : oneill 27 Jul 2014, 06:07

Vrai, j'ai oublié de le mentionner ninja.gif

Écrit par : croco 19 Mar 2015, 11:36

Bonjour,

Je souhaiterais installer cette contribution sur mon site mais j'ai quelques interrogations.

Quelle est la dernière version pour osc 2.2 ?

J'ai téléchargé de mon coté la version iOSC3_5.4rev2_for_oscommerce-2.2rc2a.zip et j'ai commencé à regarder le fichier d'installation.

J'ai trouvé ces lignes au début du fichier:

Citation
If you use SEO URL add-ons you need to install the corresponding support for correct links from and to the IOSC pages.

Support for:

ULTIMATE Seo Urls 5 ( r205 ) - by FWR Media vers2
http://addons.oscommerce.com/info/6768

and

Ultimate SEO 2-2.2d-12 - by chemo vers2
http://addons.oscommerce.com/info/2823

is included in the support package.


J'ai l'url rewritting d'installé sur ma boutique, cela veut dire que je dois réinstaller une des contributions ci-dessus pour pouvoir faire fonctionner iOSC3 ?

Merci de votre aide

Écrit par : Team SPL 19 Mar 2015, 14:20

Citation (croco @ 19 Mar 2015, 11:36) *
Bonjour,

Je souhaiterais installer cette contribution sur mon site mais j'ai quelques interrogations.

Quelle est la dernière version pour osc 2.2 ?

J'ai téléchargé de mon coté la version iOSC3_5.4rev2_for_oscommerce-2.2rc2a.zip et j'ai commencé à regarder le fichier d'installation.

J'ai trouvé ces lignes au début du fichier:

Citation
If you use SEO URL add-ons you need to install the corresponding support for correct links from and to the IOSC pages.

Support for:

ULTIMATE Seo Urls 5 ( r205 ) - by FWR Media vers2
http://addons.oscommerce.com/info/6768

and

Ultimate SEO 2-2.2d-12 - by chemo vers2
http://addons.oscommerce.com/info/2823

is included in the support package.


J'ai l'url rewritting d'installé sur ma boutique, cela veut dire que je dois réinstaller une des contributions ci-dessus pour pouvoir faire fonctionner iOSC3 ?

Merci de votre aide


Bonjour,

la dernière version est la 7.5.7r2.
Tu n'es pas obligé de réinstaller mais une modif d'un fichier est nécessaire. Tout est indiqué
ça donne ça avec l'url rewriting : http://la-boutique.passiontuning94.com/mobile/catalog_mb.php (désolé pour une éventuelle pub)

Écrit par : croco 19 Mar 2015, 14:39

Merci de ta réponse, sais-tu ou je peux la télécharger ?
Car sur le site des contributions OSC il n'y a pas cette version.

Merci

Edit: c'est bon j'ai trouvé smile.gif

Écrit par : croco 22 Mar 2015, 16:06

Salut,

J'ai une question Team SPL, quand on navigue sur le site mobile de ta boutique, je vois que ça rajoute /mobile/ dans l'url, ça ne pose pas de problème pour le référencement ?

Écrit par : Team SPL 26 Mar 2015, 19:18

Citation (croco @ 19 Mar 2015, 14:39) *
Merci de ta réponse, sais-tu ou je peux la télécharger ?
Car sur le site des contributions OSC il n'y a pas cette version.

Merci

Edit: c'est bon j'ai trouvé smile.gif


De rien wink.gif

Citation (croco @ 22 Mar 2015, 16:06) *
Salut,

J'ai une question Team SPL, quand on navigue sur le site mobile de ta boutique, je vois que ça rajoute /mobile/ dans l'url, ça ne pose pas de problème pour le référencement ?


Ca n'a pas l'air, Google par exemple voit quand tu navigue en mobile ou en desktop donc ça ne fait pas de doublon apparemment.
En desktop ça reste sur www.xxx.com et en mobile ça reste www.xxx.com/mobile

Écrit par : oneill 5 Apr 2015, 08:02

Soit tu as www.monsite.ici/mobile/monfichier.php ou tu as www.monsite.ici/mobile_monfichier.php (si tu gardes le même ndd) et ca a l'air de bien se passer.


Bon, tout le monde sera prêt pour le 21 avril ????? mrgreen.gif

Écrit par : Bonbec 5 Apr 2015, 17:29

Bonjour,

Presque mais pas avec cette contrib smile.gif

Écrit par : oneill 6 Apr 2015, 00:05

Moi oui, avec son évolution Jquery Mobile et toi ?

Écrit par : Bonbec 6 Apr 2015, 07:20

Re,
Ma bonne vieille MS2.2 tellement modifiée (en 9 ans de bons et loyaux services) n'étant pas "upgradable" en version plus récente sans tout recoder, j'ai décidé de la rendre responsive en utilisant http://getbootstrap.com/ (en version 24 colonnes alors que par défaut il est en 12 colonnes). Cela me fait modifier certains fichiers et si je souhaite ajouter des contribs, il me faudra les adapter, mais la modif sur le site sera faite une seule fois pour que cela fonctionne des téléphones aux tablettes en passant par les ordinateurs de bureau quasiment juste avec des requêtes de médias CSS.

Écrit par : aurelou 15 Jun 2015, 23:16

Bonjour,

J'ai installé la contribution et je galère... wacko.gif Toutes les pages version mobile fonctionnent (mobile_catalogue.php, mobile_login.php, etc etc.), sauf la plus importante, mobile_index.php.

Quand je veux ouvrir la page mobile_index.php, j'ai une erreur 404 avec un "Not Found - The requested URL /mobile_ was not found on this server."

J'y ai passé la soirée et je ne trouve pas de solutions.

Merci pour votre aide.

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)