THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonsoir à tous.

Je vous fait profiter de ce que j'ai mis en place pour importer plusieurs produits dans Thélia.

Téléchargez le code source d'import de Nans Stefanini
placer "Conf", "Function" et le dossier "tmp" dans la racine du dossier ADMIN


Téléchargez le fichier accueil.php modifié qui va dans le dossier"admin"

Téléchargez le fichier import.php qui va dans le dossier"admin"

Créez vos produits :

Je joins un fichier excel où il y a 2 feuilles : produit et produitdesc pour l'exportation au format csv (;) :
fichiers Excel


Avec ça vous devriez y arriver ...

Par contre en échange de ma contribution :-),
1 - Je n'ai pas su modifier le code pour mettre à jour les produits existants déjà dans la base (modification, suppression, ajout)
2 - Çà serait bien de développer une base de données Excel ou Access complète afin de gérer de manière conviviale les produits hors connection.
3 - Automatiser l'insertion d'images (avec importation des images)
4 - Paufiner tout ça quoi ...

Le mieux : Une personne saisie les produits hors connection, gère son stock, .... et ensuite zou, elle intègre tout au site en 2 temps 3 mouvements.

Merci de me contacter, j'aime bien les emails :-)

Gil

Last edited by gil (23-03-2010 16:20:39)


Gil - Webmarketing - Photographe Google Street View

  • manu
  • faï tot petar miladiu

Offline


pas mal tout ca (j'ai pas trop regardé encore) le top serait d'en faire un plugin smile


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Oui justement je ne sais pas le faire le plugin ... Je suis prêt à participer à ce développement :-) pour la version suivante ...


Gil - Webmarketing - Photographe Google Street View

Offline


Merci bien c'est super !

Vivement le plugin... c'est une fonction très TRES important... à mes yeux en tout cas !

Offline


Alors, tous à vos claviers et pondez-le moi ce plugin !!!!  lol


Gil - Webmarketing - Photographe Google Street View

Offline


bonjour, je suis un petit nouveau sur le forum mais je m'intéresse à thelia depuis un moment et il est vrai que un plugins d'import de produits est très intéressant (personnellement ma base est à 30 % terminé et il y a un peu plus de 300 ref dessus). Mais le plus intéressant serait de se servir de ce futur plugins et d'y inclure une fonction "UPDATE" pour mettre à jour les tarifs suivant les références.
Pour un site sans taille, pointure ou couleur cela pourrait être un gros plus pour thelia car faire un export à part d'une gestion commerciale tel SAGE, ciel, EBP ou autre et permettre un import dans thelia facilement serait génial.

En tout cas merci pour thelia et le forum hyper actif

Offline


Oui c'est l'idée de lier à une base de données "bureau" qui a motivé cette modif.
Et oui, aussi, un update des références déjà rentrées serait parfait. Mais je sature :-)


Mais en allant plus loin on peut mettre à jour toutes les tables. Pour ceux qui ont regardé les codes de bases que j'ai utilisés, toutes les tables de la base utilisée peuvent être mises à jour (même les articles SPIP, ...)

J'ai limité la liste de choix aux tables produit et produitdesc, mais c'est parceque j'ai retiré le code (qui est dans la source d'origine) qui faisait afficher toutes les tables.
Pour le remettre il suffit de remodifier la liste de choix comme dans le zip d'origine.

A bientôt pour du nouveau et faites connaitre vos modifications et développements ça serait sympa pour les autres !


Gil - Webmarketing - Photographe Google Street View

  • manu
  • faï tot petar miladiu

Offline


j'ai mis cet import sous forme de plugin,

Donc il n'y a plus qu'à le mettre dans le répertoire client/plugins, l'activer via l'admin (configuration/activation des plugins), on le retrouve ensuite dans l'onglet modules.

Je n'ai pas changé grand chose dessus, y a du boulot à faire pour avoir quelque chose de convenable je pense, mais vous avez une base pour faire vos développements.

Amusez-vous bien je vous laisse continuer à présent wink

http://www.megaupload.com/?d=UM2WHCH0


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

  • manu
  • faï tot petar miladiu

Offline


j'ai mis dedans 2 fichier CSV avec lesquels j'ai fait mes imports et ca a bien marché, après faut faire plus de test aussi smile


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

  • yoan
  • Cofondateur Thelia

Offline


ce sera sympa de mettre en ligne le plugin sur http://contrib.thelia.fr/

gil peux-tu te créer un compte et le publier ?

http://contrib.thelia.fr/spip.php?page=login

Merci


http://yoandemacedo.com

Cofondateur de la solution Thelia 1.x

Offline


je viens un peu de me pencher sur le code du plugins import et j'ai essayé de l'etudier un peu.

Partons du principe que nous faisons un export (sage/ciel/EBP,...) dans un fichier (lisible sous excel pour le convertir en CSV) contenant juste un champs prix et un champ ref. (de plus le probleme d'un champs vide ne se poserais plus pour l'import de produits car on aura forcement un ref et un prix à mettre à jour).

Dans le plugins d'import actuel, dans le fichier import.class.php, nous avons:

$str_query="INSERT INTO ".$bd_table."(".$champs.") VALUES (".$valeurs.")";

si on le remplacait par:

$str_query="UPDATE ".$bd_table." SET prix=".$valeurs." WHERE ref=".$champs."";

enfin c'est une piste mais après je ne suis pas expert, et pour modifier le reste du plugins je ne serais pas faire :'(

Enfin si quelqu'un veut aider à reflechir là dessus.

Offline


Ajouter ou remplacer ce code ? a mon avis il faut mettre les deux pour ajouter et modifier les produits non ?

Last edited by gil (24-06-2009 20:29:09)


Gil - Webmarketing - Photographe Google Street View

  • manu
  • faï tot petar miladiu

Offline


oui il faut mettre les deux, mais surtout tester si le produit existe déjà ou pas en se basant sur la référence du produit


http://doc.thelia.net/
http://thelia.net/modules
http://raynaud.io
PGP public Key : 0xC6E546A6

Offline


Si quelqu'un a fait les modifications sur le plugin, merci de me transférer les modifications par mail, afin que je mette à jour le zip.


Gil - Webmarketing - Photographe Google Street View

Offline


Après des heures de recherches sur le net afin d'essayer de trouver une solution pour faire des Insert et des Update à partir d'un fichier csv dans une base Mysql j'ai trouver ceci:

$row = 0;
$handle = fopen("base.csv", "r");
while(($data = fgetcsv($handle, 1000, ";")) !== FALSE){

// requete pour verifier si les données existe déjà
$data_existe="SELECT * FROM `nom_table` WHERE `blah`='$data[0]' AND `blah`='$data[2]' AND `blah`='$data[4]' AND `blah`='$data[5]' ";

$get_result=mysql_query($data_existe); 
$nbligne=mysql_num_rows($get_result); // on recupere le nombre de ligne renvoyer par le resultat de $get_result
$result_tableau=mysql_fetch_array($get_result); // on met les données dans un array()


if($nbligne>0){ // si resultat de la requete = à 0 alors on initialise la requete à un update
$id = $result_tableau['0'];   // on recupere l'id pour le update
$modifier="UPDATE `nom_table` SET `valeur` = '$data[6]' WHERE id='$id';";
$query=$modifier;  // on initialise la requete à un update

echo 'modification terminée';

}else{   // dans le cas ou notre requete nous renvoi 0 alors on initialise notre requete a un insert
$insertion = "INSERT INTO table (`toto`, `titi`, `tata`, `tutu`, `tyty`, `tonton`, `valeur`) VALUES('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]');";
$query=$insertion;   //on initialise notre requete a un insert
}
// et la on execute la requete
$execute=mysql_query($query);
echo 'insertion terminée'; 

}

Je pense que ca serait une bonne base pour travailler dessus l'import/update automatique. Enfin dites moi ce sur vous en pensez.

Last edited by thibs (28-06-2009 12:30:10)

Offline


Bon je vais me faire un peu la discussion tout seul, en gardant la structure de la base j'ai repris la meme dans un fichier csv pour essayer de faire la mise à jour des produits. Le probleme du code que j'ai c'est qu'il ne met à jour que la premiere ligne de la base et ignore le reste:

$row = 0;
$handle = fopen("produit.csv", "r");
while(($data = fgetcsv($handle, 1000, ";")) !== FALSE){

$data_existe="SELECT * FROM `produit` WHERE `ref`='$data[1]'";

$get_result=mysql_query($data_existe); 
$nbligne=mysql_num_rows($get_result); 



if($nbligne>0){ 

$modifier="UPDATE `produit` SET `prix` = '$data[3]' WHERE ref='$data[1]';";
$query=$modifier;  

echo 'modification terminée';

}else{ 

echo "Il y a de nouveau produits à inserer";
}
// et la on execute la requete
$execute=mysql_query($query);
echo 'Script terminé'; 

}

Je bloque un peu ca met bien à jour la premiere ligne et c'est tout si quelqu'un a une idée pour completer ce code.

Offline


Salut

le sujet a été enterré ou j'ai loupé un post ?

@+


v2.4.4

Offline


Bonjour Nadelo,

Non pas enterré; mais je pense vraiment qu'il faille refaire un plugin incluant les uptdates. Je pense même qu'il serait bien de tout reprendre à 0  smile

On peut faire un sujet expres ?


Gil - Webmarketing - Photographe Google Street View

Offline


perso j'ai un gentil stagiaire qui me l'as fait en plugins, tout à l'heure au travail je recup ca et je vous le met ce soir smile

Bisous.

Offline


bon n'arrivant pas à mettre le code du plugins sur "contrib" je le colle ici:

fichier: Maj.class.php

<?php
  include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");
	//require_once(realpath(dirname(__FILE__)) . "/maj_admin.php");
	class maj extends PluginsClassiques{
	

//$maj = new Maj();
function maj(){

//switch($action){

if( isset($_POST['submit']) )// si formulaire soumis
    
if(file_exists("../client/plugins/maj/produit.csv")){
				//echo "<p>le fichier existe</p><br />";

//$connect = mysql_connect("serveur","pseudo","mdp");
$connect = mysql_connect("localhost","root","");

//mysql_select_db("boutique", $connect);
mysql_select_db("mysql", $connect) or die("erreur de connexion au serveur");

$row = 0;

$handle = fopen("../client/plugins/maj/produit.csv", "r");

while(($data = fgetcsv($handle, 1000, ";")) !== FALSE){


$data_existe="SELECT * FROM `produit` WHERE `ref`='$data[0]'";

$get_result=mysql_query($data_existe); 
$nbligne=mysql_num_rows($get_result);
$result_tableau=mysql_fetch_array($get_result); 
echo '<br /><p><strong>MISE A JOUR DE:</strong> ';
if($nbligne>0);{ 
$id = $result_tableau['0']; 
$modifier="UPDATE `produit` SET `prix` = '$data[1]' WHERE ref='$data[0]';";
$query=$modifier;  
echo "$data[0] au tarif de $data[1] €</p>"; 
}

$execute=mysql_query($query);

}
fclose($handle);
}//fin if

else echo"<p>Le fichier produit.csv est introuvable</p>";
    
    
    


//}fin switch

}	
}
?>

Fichier: maj_admin.php

<?php

	include_once(realpath(dirname(__FILE__)) . "/../../../fonctions/authplugins.php");
  autorisation("maj");

// Chargement de la classe
	include_once(realpath(dirname(__FILE__)) . "/Maj.class.php");
	
?>


	<div id="contenu_int"> 
	   <p class="titre_rubrique" style="color: grey; font-size:large; font-weight:bold;">Mise à Jour</p>
	     <p align="right" class="geneva11Reg_3B4B5B"><a href="accueil.php" class="lien04">Accueil </a> <img src="gfx/suivant.gif" width="12" height="9" border="0" /><a href="#" class="lien04">Mise à Jours</a>              
	    </p>

<p style="color: grey; font-weight:bold;">Choisissez un fichier CSV</p>
<FORM method="POST" action="" enctype="multipart/form-data">

          <INPUT type=file name="fichier">
          <INPUT type="submit" name="submit" value="envoyer">
</FORM>

<?php

if( isset($_POST['submit']) )// si formulaire soumis
        
// $content_dir = "../www/laura2/client/plugins/maj"; dossier où sera déplacé le fichier
    //echo "function if lu";
    $content_dir = "../client/plugins/maj/"; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['fichier']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("<br /> <B>Le fichier est introuvable</B>");
    }

    // on vérifie l'extension
    //$type_file = $_FILES['fichier']['type'];

    //if( !strstr($type_file, 'csv'))
    //{
    //    exit("Le fichier n'est pas au bon format");
   // }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("<br /> <B>Impossible de copier le fichier $name_file dans $content_dir</B>");
    }

    echo "<br /> <B>Le fichier $name_file a bien été uploadé dans le répertoire $content_dir</B>";

//fin de vérif d'upload

?>
  
<br />
<?php
$maj = new Maj();
?>

</div>
</body>
</html>

Merci le stagiaire smile

Last edited by thibs (11-08-2010 16:58:54)

Offline


merci smile


v2.4.4

Offline


Pour ceux (pour le plugin import en masse) pour qui la liste de délimiteurs ne s'affiche pas dans l'interface d'admin, il suffit juste de rajouter php aprés les balises ouvrante du fichier  « < ?php » à la place du simple « < ? » dans le fichier form_bdd.php.

 <td>Délimiteur : </td>
<td>
<select name="del">
<option value=";" <?php echo ($_POST['del'] == ';' ? ' selected>; Point virgule' : '>; Point virgule'); 
 ?></option>
<option value="," <?php echo ($_POST['del'] == ',' ? ' selected>, Virgule' : '>, Virgule'); 
 ?></option>
<option value=":" <?php echo ($_POST['del'] == ':' ? ' selected>: Deux points' : '>: Deux points'); 
?></option>
<option value="-" <?php echo ($_POST['del'] == '-' ? ' selected>- Tiret' : '>- Tiret'); 
?></option>
<option value="/" <?php echo ($_POST['del'] == '/' ? ' selected>/ Slash' : '>/ Slash'); 
?></option>
<option value="|" <?php echo ($_POST['del'] == '|' ? ' selected>| Barre' : '>| Barre'); 
?></option>
<option value="#" <?php echo ($_POST['del'] == '#' ? ' selected># Dièse' : '># Dièse'); 
 ?></option>
 </select>
</td>

Last edited by richi3034 (28-04-2011 18:11:05)

Offline


Merveilleux tout ça ... Quelqu'un peut updater le plugin avec un tuto tout propre ?


Gil - Webmarketing - Photographe Google Street View