Bannière Flash automatique / Afficher du Flash facilement

Messagepar johnhummer » Jeu 07 Jan 2010, 08:33

Bonjour,

Voici une petite modification qui vous permettra d'afficher automatiquement au choix la bannière traditionnelle sous forme d'image cliquable, ou une bannière Flash (.swf). Par extension, la fonction permet d'inclure facilement du Flash n'importe où dans votre site.

Attention, ce n'est pas forcément la meilleur façon de procéder, ni la meilleur implantation. Il y a sûrement mieux, si quelqu'un veut compléter/modifier/améliorer/publier sa solution, j'en serais très heureux :). De plus, il faudra inclure directement dans le Flash (via geturl) le lien de la bannière, impossible d'utiliser href pour un objet (balise object)...

- télécharcher swfobject.js et le placer dans le répertoire includes (ou autre part si cela vous pose des problèmes de sécurité).

- inclure le code suivant dans votre template.php, entre les balises <head></head>:

Code: Tout sélectionner
<script type="text/javascript" src="includes/swfobject.js"></script>

- dans le fichier includes/functions/html_output.php, insérer à la fin la fonction tep_flash, calquée sur tep_image:

Code: Tout sélectionner
////
// The HTML Flash wrapper function
function tep_flash($src, $div, $width = '', $height = '', $alt = '') {

    if ( (empty($src) || (empty($div)) || ($src == DIR_WS_IMAGES)) && (IMAGE_REQUIRED == 'false') ) {
      return false;
    }

  $size = getimagesize($src) ;
 
  if (empty($width))
    {
   $width = $size[0] ;
   }
 
  if (empty($height))
   {
   $height = $size[1] ;
    }
   
    $image  =  '<script type="text/javascript">' ;
    $image .= 'swfobject.embedSWF("' . tep_output_string($src) . ' ", "' . tep_output_string($div) . '","' ;
   $image .=  tep_output_string($width) . '","' . tep_output_string($height) . '", "9.0.0");' ;
   $image .= '</script>' ;
   
    if(empty($alt))
     {
     $image .= '<p><strong>This content can&apos;t be displayed...<br>You need to upgrade your Flash player !</strong></p>' ;
      }
   else
      {
     $image .= '<p><img src="' . tep_output_string($alt) . '"' ;
          $image .= ' title=" ' . tep_output_string($alt) . ' "';

      if(tep_not_null($width) && tep_not_null($height))
       {
              $image .= ' width="' . tep_output_string($width) . '" height="' . tep_output_string($height) . '"';
            }

          $image .= '></p>';
   }
   
    return $image;
  }

Utilisation:
. $src (obligatoire) est le fichier (avec le chemin) de la bannière (.swf, .jpg ...)
. $div (obligatoire) est le nom de la balise div qui contiendra l'animation/l'image.
. $width et $height (optionnels) sont la largeur et la hauteur du conteneur. Si aucune valeur n'est donnée, ce sont les dimensions de l'animation/de l'image qui sont prises en compte
. $alt (optionnel) est un contenu de secours à afficher si le navigateur ne reconnaît pas l'animation flash. A améliorer, cela semble ne pas très bien fonctionner... De toute façon, le paramètre est optionnel.

- dans includes/functions/banner.php, modifier la fonction tep_display_banner.

Modifier le prototype de la fonction en ajoutant le paramètre $div. Remplacer

Code: Tout sélectionner
function tep_display_banner($action, $identifier) {

par

Code: Tout sélectionner
function tep_display_banner($action, $identifier, $div = '') {

Vers la ligne 89, remplacer

Code: Tout sélectionner
if (tep_not_null($banner['banners_html_text'])) {
      $banner_string = $banner['banners_html_text'];
    } else {
      $banner_string = '<a href="' . tep_href_link(FILENAME_REDIRECT, 'action=banner&amp;goto=' . $banner['banners_id']) . '">' . tep_image(DIR_WS_IMAGES . $banner['banners_image'], $banner['banners_title']) . '</a>';
    }

par:

Code: Tout sélectionner
if (tep_not_null($banner['banners_html_text'])) {
      $banner_string = $banner['banners_html_text'];
    } else { 
    if(preg_match("[.swf$]",$banner['banners_image']))
      {
     $banner_string = tep_flash(DIR_WS_IMAGES . $banner['banners_image'],$div) ;
     }
   else
      {
       $banner_string = '<a href="' . tep_href_link(FILENAME_REDIRECT, 'action=banner&amp;goto=' . $banner['banners_id']) . '">' . tep_image(DIR_WS_IMAGES . $banner['banners_image'], $banner['banners_title']) . '</a>';
     }

    }

- dans le fichier includes/content/index.php, inclure l'appel à tep_display_banner dans une balise div qui sera nommée. Le nom de la balise sera transmis en paramètre à la fonction tep_display_banner:

Code: Tout sélectionner
 <?php
  if ($banner = tep_banner_exists('dynamic', '800x260')) {
  echo '<div id="banner_main_img">';
  echo tep_display_banner('dynamic', '800x260',"banner_main_img"); 
  echo '</div>';
  }
   include(DIR_WS_MODULES . FILENAME_NEW_PRODUCTS);
   ?>

Voilà, dans le menu Outils -> Bannière de la partie administration de la boutique, vous pouvez continuer à donner une image (avec la cible de l'image), ou donner une animation flash. Dans ce cas, la cible n'a aucun effet, il faut utiliser la fonction geturl de Flash (dans l'animation Flash) si vous voulez rendre la bannière cliquable.
Notez que l'on ne fait aucune distinction au niveau de la base de données entre une image et du Flash, et que le Flash est stocké dans le répertoire images (ce qui, conceptuellement, n'est pas satisfaisant). Personnellement, je triche en donnant un chemin comme /images/../flash, où flash est un répertoire dédié.

Vous pouvez appeler plusieurs fois tep_display_banner, à condition de donner un nom div différent.

Vous pouvez aussi utiliser la fonction tep_flash directement, par exemple pour afficher dans l'en-tête du site une animation Flash qui ne sera jouée que sur la page principale:

Code: Tout sélectionner
if ($page_content == "index.php")
    {
       echo tep_flash(DIR_WS_TEMPLATES . $template . DIR_WS_FLASH . 'banner.swf',"header","785", "228",'') ;
    }

Bons développements...
Dernière édition par johnhummer le Jeu 07 Jan 2010, 09:07, édité 1 fois.
johnhummer
Membre actif
 
Messages: 34
Inscription: Mer 30 Déc 2009, 11:56

Retourner vers Design

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

cron