Jump to content

[Résolu] Test présence d'un fichier


Recommended Posts

Bonjour à tous,

Ca un petit moment que je planche sur ce problème mais c'est pas mon fort le php et le smarty et je tourne en rond.

J'ai besoin de faire un test sur l'existence d'un fichier pour exécuter un bout de code.
Explication :
if (un fichier nommé ... existe){

bla bla bla
mon bout de code
}
sinon{
rien
}

Merci par avance pour votre aide.

Link to comment
Share on other sites

bonjour

<?php
$filename = '/chemin/jusqu/a/fichier.txt';

if (file_exists($filename)) {
   print "Le fichier $filename existe";
} else {
   print "Le fichier $filename n'existe pas";
}
?>



A+

PS : Mettre le post en [Résolu] si c'est le cas

Link to comment
Share on other sites

Merci pour cette réponse. J'ai effectivement vu ce type de code mais je ne vois pas comment l'intégrer. Il faut peut etre que j'explique plus.

Mon test est le suivant :
if ( {$img_cat_dir}{$subcategory.id_image}-category.jpg existe) {

affiche un bout de code pour faire du flash
<object classid="clsi...
</object>

}

Je ne vois pas comment intégré ce que tu m'as donné avec mon algo.

Link to comment
Share on other sites

Oui mais est ce que j'ai le droit d'intégrer du smarty dans du php?
Parce que j'aurai besoin de faire quelque chose du genre :

<?php
$filename = '{$img_cat_dir}{$subcategory.id_image}-category.jpg ';

if (file_exists($filename)) {
ma_var == 1;
}
else{
ma_var == 0;
}
?>


{if  $ma_var== 1}
    flash...       
{/if}



mais je suis pas sur que ca fonctionne super bien ou même que ca fonctionne tout cours...

Link to comment
Share on other sites

Non pas dans smarty directement

Il faut que tu édites le fichier php qui appelle le fichier tpl (certainement category.php)

Le mieux serai de nous dire où exactement tu souhaites effectuer cette manipulation :)

Link to comment
Share on other sites

C'est dans category.tpl. Au moment où il affiche les images des catégories. Ci-joint une image explicative.

En gros, j'aimerai que si il y a une image appelée "nb_categorie"-category.jpg existe, on l'affiche.
Sinon si elle n'existe pas mais que "nb_categorie"-category.swf existe, on l'affiche.

Ca devrait se trouver à partir de là :

            

getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}">


Link to comment
Share on other sites

avant de te donner le code que tu veux, peux-tu me dire déjà exactement ce que tu souhaites faire avec les résultats de cette condition, et aussi est-ce pour un code lié au backoffice ou est-ce un code pour le frontoffice tel qu'un module ?

de plus, dans le code que je t'ai mis déjà je vois pas ce qu'on peut donner de plus :/

les variables {$img_cat_dir} et {$subcategory.id_image} sont des définitions php avant d'être envoyées à smarty non ?

Link to comment
Share on other sites

Pour répondre à ta question, c'est pour le front office.

J'aimerai que ça affiche deux choses possible pour les images des catégories:
. soit une image si elle existe

. soit du flasch si il existe

. sinon l'image par défaut.


sachant que je vais récupérer mon nom d'image par {$img_cat_dir}{$subcategory.id_image}-category.jpg (je pense en tout cas).
Et mon flash par {$img_cat_dir}{$subcategory.id_image}-category.swf

Link to comment
Share on other sites


sachant que je vais récupérer mon nom d'image par {$img_cat_dir}{$subcategory.id_image}-category.jpg (je pense en tout cas).
Et mon flash par {$img_cat_dir}{$subcategory.id_image}-category.swf


je comprends bien mais si tu penses récupérer les valeurs chargées dans {$img_cat_dir} et {$subcategory.id_image} c'est que tu les as justement déjà chargée de le php avec un $smarty->assign() ! D'ailleur c'est déjà chargé par le système ces variables !

donc il n'y a pas l'utilité de faire un retour de variable smarty pour l'utiliser en php ! Ca ne marche pas comme ça ! C'est le php qui charge les données afin qu'ensuite smarty les exploite, et pas l'inverse !

De plus que ce soit variable php ou smarty, pourquoi souhaites-tu mettre en variable le chemin du fichier justement ! Si c'est fixe et que tu n'y touches pas, pourquoi ne pas l'intégrer directement en php, sans vouloir récupérer ces mêmes valeurs dans smarty ! Elles ne serviront à rien puisque la condition est déjà passée sur php !
Link to comment
Share on other sites

Salut,

Je pense que le plus simple est de faire le teste directement dans le fonction getSubCategories qui se trouve dans le fichier classes/Category.php (ligne 319)
Tu dois trouver ceci:

            $row['id_image'] = (file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'.jpg')) ? $row['id_category'] : Language::getIsoById($cookie->id_lang).'-default';


Attention je tournes sur 1.2.0.7

Link to comment
Share on other sites

Je ne suis pas bien familiarisé avec le smarty.

J'ai cité dans mes précédent post {$img_cat_dir} et {$subcategory.id_image} car, j'ai vu dans les fichier tpl que ca servait à trouver le chemin des images. Mais derrière, je ne savais pas comment ca fonctionnait effectivement.

Vous avez vu mon besoin :

J’aimerai que ça affiche deux choses possible pour les images des catégories:
. soit une image si elle existe

. soit du flasch si il existe

. sinon l’image par défaut.

Je suis ouvert à toute proposition.

je tourne en Version 1.1.0.5

Link to comment
Share on other sites

La je m'aventure dans des choses que je ne connais pas vraiment.
Je vois du $row['id_image'] et $row['name'], donc j'imagine qu'on doit pouvoir faire quelque chose avec ca du type $row['name_swt'].
Mais tout ceci est un monde obscure pour moi.

Link to comment
Share on other sites

Le $row est seulement le résultat de la requête SQL qui est juste au dessus, on est bien loin de smarty là c'est du php pur...

C'est à ce niveau là

(file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'.jpg')) ? $row['id_category'] : Language::getIsoById($cookie->id_lang).'-default';



enfin en même temps il est possible que ça ne soit pas le même code entre la 1.1.0.5 et la 1.2.0.7..

Link to comment
Share on other sites

Mais tout ceci est un monde obscure pour moi.


C'est pour ça qu'avant de réellement proposer des solutions et des modifications de codes, il nous faut savoir l'objectif et surtout tous les éléments qui mènent à la réponse !
Donc moi je vois bien ce que tu comptes faire, maintenant faut que tu me dises exactement où tu souhaites faire afficher soit l'image, soit le flash, soit l'image par défaut. Et aussi où sont situer les images, et le flash avec le chemin et les noms des fichiers exacts ?
Link to comment
Share on other sites

Comme toujours une bonne image est toujours plus clair.

Comme vous voyez, on se trouve dans une catégorie.
Je souhaite donc mettre à l'endroit des images :
. soit conserver une image si elle existe
. soit mettre un swf si il existe
. sinon defaut

Mes images de catégories sont par défaut dans img/c/.

Mes sources sont formées de la manière suivant :
(numéro-categorie)-categories.jpg
ex : 10-categories.jpg
ou
(numéro-categorie)-categories.swf
ex : 22-categories.swf

10005_H30FG93BDA5ParL3gXcP_t

Link to comment
Share on other sites

as-tu pensé aussi qu'il y a sur la présentation d'une catégorie :

d'une part l'affichage, si elle existe de l'image taille normale de la catégorie en cours
d'autre part l'affichage, si elles existent des image taille réduite de 'sous-catégories' listées dans la catégorie en cours.

Ce qui signifie que si c'est un flash, il faudra afficher le flash une fois dans la catégorie en cours, mais aussi en sous catégories. Seulement la taille de ton flash doit quand même prendre en compte au moins celle de la taille des sous-catégories de manière à ne pas fausser l'affichage !

N'est-ce pas ?

Link to comment
Share on other sites

Je pense voir de quoi tu parles. Sur cette partie, j'ai différencié les deux images comme on peut voir sur l'image jointe.

Il y a une petite image pour l'aperçu des différentes catégories et une image pour cette du bandeau.

Mais effectivement le bout de code peut être mis dans les deux parties.

C'est à dire mettre une image ou un flash pour le bandeau et l'aperçu catégorie.

Par exemple :
23-category.jpg ou 23-category.swf ou defaut

et

23-category-top.jpg ou 23-category-top.swf

10006_3ip3zYoq1unkaQ8l7nru_t

Link to comment
Share on other sites

oui mais dans le principe, si tu choisies un flash pour la catégorie, ce flash devra être affiché aussi bien sur la catégorie en elle même que lorsqu'elle sera listé dans sa catégorie parent

et c'est fonctionnel pour les images car l'algo prévoit un resize des images, une normale pour la catégorie quand on est dedans, et une plus petite pour cette même catégorie quand elle est listée

Est-ce que tu souhaites aussi mettre des animations flash dans la présentation de la catégorie (ce qui s'apparente à ton bandeau en fait)

Link to comment
Share on other sites

Je ne suis pas sur de comprendre ce que tu cherches à pointer.

Actuellement, ce que j'ai fait fonctionne correctement. Cf joint.
J'aimerai "juste" changer les aperçu par des swf qui portent le même nom que les jpg si ils existent.
Des fois le juste peut etre plus compliqué que prévu (ou pas des fois).

10010_ohTKw7BJKk7vPP2jeQB1_t

Link to comment
Share on other sites

Par exemple ceci :

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
   codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
   width="128" height="128">



  <embed src="---mettre le bon nom----.swff"
    quality="high"
    pluginspage="http://www.macromedia.com/go/getflashplayer"
    type="application/x-shockwave-flash"
     width="128" height="128">
   </embed>
</object>

Link to comment
Share on other sites

Bon, voici le code à changer !

Par contre dès lors que tu modifies la classe Category.php, pense que si tu fais une mise à jour de prestashop, tout va se supprimer, si Category.php devait être modifier. Donc note la manipulation pour la refaire au cas où !

édite le fichier /classes/Category.php

dans la fonction :

public function getSubCategories($id_lang, $active = true)


à la ligne 337 environ, remplace :

           $row['legend'] = 'no picture';
           $resultsArray[] = $row;
       }
       return $resultsArray;


par le code suivant :

           if (file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'-category.swf')) $row['id_flash'] = $row['id_category'];
           $row['legend'] = 'no picture';
           $resultsArray[] = $row;
       }
       return $resultsArray;


cet ajout de code prend en compte que tes flashs sont de la forme : [id_category]-category.swf
si ce n'est pas le cas change dans la ligne

if (file_exists(_PS_CAT_IMG_DIR_.$row['id_category'].'-category.swf')) $row['id_flash'] = $row['id_category'];


ensuite edite le fichier tpl de ton thème : /themes/ton_theme/category.tpl
et remplace , ligne 37 environ :



par :

               {if $subcategory.id_flash}
                   <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="128" height="128">


                       <embed src="{$img_cat_dir}{$subcategory.id_flash}-category.swf"    quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="128" height="128"></embed>
                   </object> 
               {else}

               {/if}

Link to comment
Share on other sites

Chapeau bas l'artiste.
:wow:

Au cours de cette discussion tu as mis le doigt sur une idée intéressant que je vais essayer de mettre en place avec ce que tu m'as proposé. C'est à dire de faire la même chose pour les bandeau pour les animer. Comme ca si j'ai le temps de les animer y aura un swf sinon on gardera l'image.

Un grand merci pour toute l'aide fourni.
Merci beaucoup,

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...