Jump to content

Comment dupliquer un module ? Solution fournie


Recommended Posts

Bonjour à tous,

 

Cela fait maintenant un bon moment que nous réalisons des sites pour nos clients et jusqu'ici nous n'avons jamais pris le temps de vous donner notre solution interne pour dupliquer un module.

 

Notre solution c'est de lancer un script bash (sous linux) que l'on a créé.

 

Ce script copie un module et renomme les fichiers ainsi que le contenu des fichiers.

 

Son utilisation est la suivante en ligne de commande : duplicate_module.sh modulename prefix toreplace

 
modulename : Nom du répertoire du module que l'on va dupliquer
prefix : Prefix que l'on va ajouter pour le nouveau module
toreplace : Elements à remplacer séparés par un pipe | 
 
Par exemple, si on veut copier le module ps_imageslider de Prestashop 1.7, il faut taper :
./duplicate_module.sh "ps_imageslider" "new_" "imageslider|homeslide"
 
J'espère que ce script pourra vous servir tout autant qu'à nous.
 
Voici le contenu du script :
#!/bin/bash
# SCRIPT Created by Pliciweb Solutions / www.pliciweb.com
# Author Stéphane TRICHET
cn='\e[0;m'
cv='\e[0;32m'
cr='\e[0;31m'

if [ "$#" -ne 3 ]; then
 echo -e "
Usage : duplicate_module ${cv}modulename prefix toreplace${cn}

${cv}modulename${cn} : Nom du répertoire du module que l'on va dupliquer
${cv}prefix${cn} : Prefix que l'on va ajouter pour le nouveau module
${cv}toreplace${cn} : Elements à remplacer séparés par un pipe | 
 
Exemple : duplicate_module \"ps_imageslider\" \"new_\" \"imageslider|homeslide\"
"
exit
fi

modulename="$1"
prefix="$2"
toreplace="$3"

sed_regex="s/\(${toreplace/|/\\|}\)/${prefix}\1/ig"
rename_regex="s/(${toreplace})/${prefix}\$1/ig"
new_modulename=$(echo "${modulename}" | sed  "${sed_regex}" )

if [ ! -d "${modulename}" ];then
	echo -e "${cr}ERROR${cn} : Le module ${modulename} n'existe pas. Stop!";
	exit
fi
if [  -d "${new_modulename}" ];then
        echo -e "${cr}ERROR${cn} : Un module de meme nom (${new_modulename}) existe déjà. Stop!";
        exit
fi

echo -e "1/ Copie du module de ${modulename} vers ${new_modulename}"
cp -rf "${modulename}/." "${new_modulename}"
if [ ! -d "${new_modulename}" ];then
        echo -e "${cr}ERROR${cn} : La copie n'a pas fonctionnée. Stop!";
        exit
fi
echo -e "   ${cv}OK${cn}";

cd "${new_modulename}"
echo "2/ Remplacement du contenu des fichiers"
find ./ -type f -exec sed -i "${sed_regex}" {} \;
echo -e "   ${cv}OK${cn}";

echo "3/ Renommage des fichiers et répertoires"
find ./ -exec rename "${rename_regex}" {} \;
echo -e "   ${cv}OK${cn}";

echo ""
echo -e "${cv}RESULTAT${cn} : Module dupliqué avec succès, voici son nouveau nom : ${cv}${new_modulename}${cn} "
echo ""

 

  • Like 1
Link to comment
Share on other sites

Bonjour Stéphane,

 

Déjà félicitations pour cette initiative.

 

Avez-vous prévu le cas où le module dupliqué utilise sa propre table dans la base de données ?

Ou autrement dit avez vous fait en sorte que le module original et son "clone" n'enregistre pas leurs infos dans la même table ?

Link to comment
Share on other sites

Bonjour,

 

Oui tout à fait, le script le gère, au travers du paramètre toreplace (Liste des éléments à remplacer séparés par un pipe | )

 

Dans l'exemple pour le module ps_imageslider on met justement "imageslider|homeslide" dans ce paramètre car certaines variables de configuration contiennent "homeslide" et certaines tables aussi.

Mais bon, normalement, "imageslider" aurait dû suffire car en principe un module crée des tables contenant son propre nom.

 

Du coup, cela veut dire qu'il faut quand même lire un peu le code du module à dupliquer pour s'assurer une bonne copie du module.

 

Mais ensuite le script fait tout le travail tout seul.

 

Stéphane,

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Bonjour, Pouvez-vous m'aider

 

Je souhaite dupliquer le Bloc Catégories v2.9.4 dans Prestashop 1.6 pour l'ajouter en dessous du Diaporama Slider et bien sur pouvoir l'éditer indépendamment du premier en haut

 

Merci bien pour votre aide

 

Cdt

AD

Link to comment
Share on other sites

Merci pour votre réponse, (Je suis novice)

 

J'ai réussi a dupliquer et modifié dans la racine de mon net2ftp le fichier blockategories comme expliqué dans ce topic :

 

 

1. Go to your modules folder and make a copy/duplicate of your blockcategories folder and rename it with blockcategories2 for example.
2. Enter in the blockcategories2 folder and rename the blockcategories.tpl and blockcategories.php to blockcategories2.tpl and blockcategories2.php.
3. Open up your blockcategories2.php and replace all blockcategories words to blockcategories2.
4. In blockcategories2.php find this string: 
function getTree($resultParents, $resultIds, $maxDepth, $id_category = 1, $currentDepth = 0)

In $id_category = 1 replace the 1 with your desired subcategory id number

5.Open your blockcategories2.tpl and in line 5 replace the Categories string with your desired block name.For example i have used this for one of my blocks:

{l s='Perifericos' mod='blockcategories'}


That´s all,if you use a language that is not english open up your languague file in the blockcategories2 folder and rename all the blockcategories strings to blockcategories2
 

Quand j'ouvre mon backoffice et que je vais dans modules et services et que je tape "categories" j'ai bien mes deux bloc, que j'ai activé, mais cela ne change rien sur ma page

 

Je me demande si ils ne sont pas superposés, mais je ne sais pas comment faire pour en déplacer 1, par exemple en dessous du Diaporama

 

Ou peut être y a t il une manipulation pour activer le Block 2 pour savoir si il fonctionne bien

Link to comment
Share on other sites

  • 1 month later...
  • 2 years later...
  • 2 months later...

Bonjour @Amorino,

En fait, vous devez déposer le script sous un environnement Linux, le rendre exécutable et ensuite le jouer.

Malheureusement, je ne peux pas faire un scénario pas à pas, sans oublier que ce script commence à dater :)

En théorie ça donnerait une exécution de ce type :

./duplicate_module.sh "ps_wirepayment" "new_" "wirepayment"

En espérant avoir aidé un peu.

Link to comment
Share on other sites

  • 1 month later...
  • 4 months later...

Bonjour, je viens de tester sous mac, le script se lance mais ca ne duplique rien 🙂 

 

 

Last login: Fri Jun  5 21:02:17 on ttys001

Tiri ~ % /Users/Tiri/Desktop/TEST.sh ; exit;

Usage : duplicate_module \e[0;32mmodulename prefix toreplace\e[0;m

\e[0;32mmodulename\e[0;m : ps_imageslider

\e[0;32mprefix\e[0;m : 2

\e[0;32mtoreplace\e[0;m : duplicate_module "ps_imageslider" "new_" "imageslider|homeslide"

[Opération terminée]

Link to comment
Share on other sites

3 hours ago, pliciweb_stephane said:

Vous devez lui passer des paramètres pour qu'il fonctionne.
Par exemple duplicate_module.sh "ps_imageslider" "new_" "imageslider|homeslide"

Merci, je teste ça cette semaine ...

Très bonne journée 😉

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