web-dev-qa-db-fra.com

Comment ne pas écraser un fichier spécifique lors de l'installation de la mise à jour d'extension

Je crée un modèle et voici mon templateDetails.xml.

<extension version="3.4" type="template" client="site" method="upgrade">
    <name>my_tpl</name>
    <creationDate>18-06-2015</creationDate>
    <author>memyself</author>
    <copyright>Copyright © 2015 memyself.com</copyright>
    <authorEmail>[email protected]</authorEmail>
    <authorUrl>http://www.memyself.com</authorUrl>
    <version>1.0.0</version>
    <description>TPL_DESC</description>
<files>
    <filename>component.php</filename>
    <filename>error.php</filename>
    <filename>favicon.ico</filename>
    <filename>index.php</filename>
    <filename>templateDetails.xml</filename>
    <filename>template_preview.png</filename>
    <filename>template_thumbnail.png</filename>

    <filename>css/custom.css</filename>

    <folder>css</folder>
    <folder>html</folder>
    <folder>images</folder>
    <folder>img</folder>
    <folder>js</folder>
    <folder>language</folder>
    <folder>less</folder>
</files>

J'utilise la méthode de mise à niveau afin que tous les fichiers soient écrasés lorsqu'une nouvelle mise à jour est installée. Mais je ne veux pas que custom.css soit écrasé lors de l'installation d'une mise à jour par l'utilisateur (uniquement lors de la mise à jour, pas pour la première installation), car custom.css contient du code personnalisé modifié par l'utilisateur.

Est-il possible de faire cela?

3
webchun

Je pensais développer mon commentaire.

Vous allez d’abord avoir besoin d’ajouter un fichier de script install-uninstall-update à votre composant. Prenez connaissance de la documentation de Joomla pour savoir comment procéder.

Une fois que vous avez implémenté cela, vous allez vouloir utiliser la fonction update qui n'exécutera ce code que lorsque l'utilisateur mettra à jour le composant.

Dans cette fonction, vous devez obtenir le contenu du fichier CSS existant. S'il contient du contenu, vous n'avez pas besoin de le remplacer.

Ainsi, lorsque vous expédiez votre première version de l'extension, assurez-vous que le fichier CSS ne contient pas de contenu ni même de commentaires. Dans la mise à jour Zip (par exemple v1.0.1), vous devez déplacer le fichier CSS du répertoire CSS vers un autre emplacement (peut-être un nouveau répertoire appelé update_css ).

Enfin, le code:

function update($parent) 
{
    // Import dependencies
    JLoader::register('JFile', JPATH_LIBRARIES . '/joomla/filesystem/file.php');

    // Define the old CSS file path
    $old_css = JPATH_ROOT . '/components/com_mycomponent/css/custom.css';

    // Check if the file exists
    if (JFile::exists($old_css))
    {
        // Get the contents of the file
        if (file_get_contents($old_css) != '')
        {
            // Define the new CSS file path
            $new_css = JPATH_ROOT . '/components/com_mycomponent/update_css/custom.css';

            // Check if the file exists
            if (JFile::exists($new_css))
            {
                // Move the file
                JFile::move($new_css, $old_css);
            }
        }
    }
}

J'ai ajouté quelques chèques ici, mais vous devrez apporter quelques modifications pour vous satisfaire.

J'espère que cela t'aides

2
Lodder

Je ne sais pas comment résoudre votre question, mais je voudrais expliquer comment je le fais dans mes composants.

J'utilise css/style.css qui a le style du composant, puis je charge theme/css/custom_style.css ce style surchargé avec le style client.

Par exemple, dans style.css, j'ai:

.box-wrapper{backgound:#ffffff; padding:10px; border:1px solid #ccc}

Si je veux changer de case, je ne toucherai pas le style.css mais custom_style.css

.box-wrapper{border:0}

Cela changera la boîte mais maintiendra le style.css original

Bien sûr, je ne distribuerai pas custom_style.css dans le package.

0
Piero Marsilio