Jump to content

Dupliquer table


Recommended Posts

que veux tu faire exactement ?
copier une table d'une base A à une base B ?
ou copier toute la base ?
sauf erreur pour copier des articles d'une base a l'autre tu dois copier plusieurs tables:

PREFIX_category_product
PREFIX_product
PREFIX_product_attribute
PREFIX_product_attribute_combination
PREFIX_product_attribute_image
PREFIX_product_lang
REFIX_product_tag


a+

Link to comment
Share on other sites

Bonjour merci de votre répons.
La BDD est la même pour les deux sites.
Par défaut, Lorsque l'on ajoute un article dans presta, il se retrouve dans la table ps_product_lang.
J'aimerai qu'a chaque ajout d'article on écrive également les informations dans la table sitevitrine_product, table que j'ai créé pour un site vitrine.
Je sais théoriquement comment il faudrait faire avec un INSERT INTO sitevitrine_product (etc...)
Mais je ne trouve pas ou faire la modification et réellement le faire en pratique.

Link to comment
Share on other sites

Bonjour, j'ai 2 site qui utilise les mêmes articles, j'ai bidouillé un script en php que j'appelle en passant le nom des tables a dupliquer dans l'url, et la copie se fait, l restriction c'est que c'est uni-directionelle ( on ecrase la table qui recoit).,si vous êtes ok pour écraser la table qui recoit, mettre $ecraser = true


p.ex : http://www.monsite.com/syncro.php?table_source=ps_product_lang&table_cible=ps_product_lang

ainsi j'ai créer des pages ,avec des frames qui apple les url avec des tables différentes par groupe,pour agir sur plusieurs table en 1x.

pratique aussi pour transférer un site local sur un hebergeur.

comme je débute en php/mysql n'hésitez pas a me communiquer mes erreurs ou vos modifs.

ps. une grande partie du code est pompé sur le net.

syncro.php

Link to comment
Share on other sites

Bonjour et merci de votre aide.
Dans mon cas votre solution n'est pas applicable.
En fait, il y aura plusieurs prestashop et un site vitrine.
Le site vitrine regroupera toutes les articles des différents prestashop.

Et c'est à chaque fois qu'un article est ajouté dans un de ces prestashop qu'il doit être ajouté dans la table du site vitrine.
Donc en créant une copie de la table d'un site prestashop, on effacerai toutes les valeurs des autres prestashop.
Merci quand même je vais essayer de fouiller encore.

Link to comment
Share on other sites

Ben, pourquoi ne pas faire une extraction xml, ou csv, ou autre d'ailleurs.

Shopmania propose un script qui permet d'afficher tous les produits, vous pourriez-vous en inspirer.

Lorsque vous avez besoin de lire les infos d'un produit, vous allez directement lire le fichier.

Link to comment
Share on other sites

Hello,

ça dépend en csv c'est assez rapide...

Si le site vitrine est sur le même serveur dans ce cas ce n'est pas un soucis, il suffit d'attaquer la base de donnée directement lors de la création d'un article dans prestashop ;)

Link to comment
Share on other sites

Comme je suis un peu feignant c'est quand même mieux quand c'est automatique :D.
Donc pour les requêtes mysql concernant les produits j'ai vu que c'était dans le dossier classes Product.php.
J'ai bon ?
Je suis pas trop habitué encore par les utilisations des classes en php il va falloir que je m'y mette.
Maintenant il va falloir que je créé une fonction qui copie les entrées dans ma table, c'est pas encore gagné.

Dans la table je vais copier les valeurs de l'article:
nom, description, prix, catégorie, la valeur du nom du site qui est la même _DB_PREFIX_, tags, image.

Link to comment
Share on other sites

Je suis aussi un feignant (développeur powaa)
Pas forcement besoin d'une fonction :D, c'est certainement dans la classes Product, je penses qu'il suffit de mettre la requête juste en dessous de la requête pour PS et d'ouvrir une connexion vers la base de donnée du site vitrine :)

Link to comment
Share on other sites

Voui c'est ce que je comptai faire mais bon n'étant pas un expert en php je vais un peu batailler avant de ne plus avoir de ces magnifiques lignes d'erreurs.
La difficulté étant que la requête PS ajoute les donnés dans plusieurs tables alors que je souhaite copier les infos dans un seul, donc je peux pas juste faire un c/c comme j'aurai espéré.
Va falloir creuser un peu plus.
Mieux vos batailler longtemps à faire un bon script que de répéter 36000 fois la même action (export/import) parce qu'on a pas put optimisé.

Link to comment
Share on other sites

Bon ben ca commence mal dans le fichier Product.php j'ai trouvé les requettes pour ajouter des attributs a un objet, afficher les différents objets selon tels ou tel critères mais pas réellement celle ou on ajoute l'objet en lui même.
(Dans la table product et product_lang).

Link to comment
Share on other sites

Enfin réussit à faire qqch:
Dans le fichier ObjectModel.php du dossier Classes j'ai fait les modification suivantes (en gras):

/* Database insertion */
if ($nullValues){
$result = Db::getInstance()->autoExecuteWithNullValues(_DB_PREFIX_.$this->table, $this->getFields(), 'INSERT');
$fields2=$this->getFields();
$fields2['id_product'] =null;
$result2 = Db::getInstance()->autoExecuteWithNullValues('0lighton_product', $fields2, 'INSERT');
}
else{
$result = Db::getInstance()->autoExecute(_DB_PREFIX_.$this->table, $this->getFields(), 'INSERT');
$fields2=$this->getFields();
$fields2['id_product'] =null;
$result2 = Db::getInstance()->autoExecute('0lighton_product',$fields2, 'INSERT');
}
if (!$result)
return false;

/* Get object id in database */
$this->id = Db::getInstance()->Insert_ID();
/* Database insertion for multilingual fields related to the object */
if (method_exists($this, 'getTranslationsFieldsChild'))
{
$fields = $this->getTranslationsFieldsChild();
if ($fields AND is_array($fields))
foreach ($fields AS $field)
{
foreach ($field AS $key => $value)
if (!Validate::isTableOrIdentifier($key))
die(Tools::displayError());
$field[$this->identifier] = intval($this->id);
$result = Db::getInstance()->AutoExecute(_DB_PREFIX_.$this->table.'_lang', $field, 'INSERT') && $result;
$result2 = Db::getInstance()->AutoExecute('0lighton_product_lang', $field, 'INSERT') && $result2;
}
}
return $result;
}

Étant donné qu'il y aura plusieurs prestashop qui ajouteront les données dans une même base obligé passer la valeur
de $fields2['id_product'] =null; en null pour profiter de l'autoincrement de la table et éviter les conflits d'id.
Maintenant il me reste à copier les attributs.

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...