Joomla.it Forum

Joomla! 3 => I Template di Joomla! 3 => : Claudio Romeo 04 Jul 2017, 16:43:37

: Override della lingua da appendere e non sovrascrivere
: Claudio Romeo 04 Jul 2017, 16:43:37
Devo distribuire i file di override di due lingue (italiano e inglese), sia frontend sia backend, in modo che vengano installati nelle cartelle corrette come se si trattasse di una normale estensione.
Non è questo il problema: so come creare un file manifest.xml.
Il problema sta nel fatto che tutto funziona bene solo se i file it-IT.override.ini e en-GB.override.ini non esistono già. Se i file sono già presenti, i miei sostituiscono quelli vecchi, che andrebbero perciò persi.
La domanda è: come faccio a specificare nel file manifest.xml che il testo deve essere appeso al file esistente e non sostituirsi ad esso?
: Re:Override della lingua da appendere e non sovrascrivere
: giovi 05 Jul 2017, 09:45:17
Solo tramite il manifest non puoi fare quello che chiedi, devi creare uno script che si occupi di creare il file se non esiste e di appenderci il tuo contenuto. Per lanciare loscript dopo l'installazione dell'estension basta aggiungere questa riga al manifest:
 
:
<scriptfile>script.php</scriptfile>  e poi crei un file script.php:
:
<?php
// No direct access to this file
defined('_JEXEC') or die;

/**
 * Script file of HelloWorld module
 */
class com_TuoComponenteInstallerScript
{
/**
 * Method to install the extension
 * $parent is the class calling this method
 *
 * @return void
 */
function install($parent
{
echo '<p>The component has been installed</p>';
}

/**
 * Method to uninstall the extension
 * $parent is the class calling this method
 *
 * @return void
 */
function uninstall($parent
{
echo '<p>The component has been uninstalled</p>';
}

/**
 * Method to update the extension
 * $parent is the class calling this method
 *
 * @return void
 */
function update($parent
{
echo '<p>The component has been updated to version' $parent->get('manifest')->version '</p>';
}

/**
 * Method to run before an install/update/uninstall method
 * $parent is the class calling this method
 * $type is the type of change (install, update or discover_install)
 *
 * @return void
 */
function preflight($type$parent
{
echo '<p>Anything here happens before the installation/update/uninstallation of the component</p>';
}

/**
 * Method to run after an install/update/uninstall method
 * $parent is the class calling this method
 * $type is the type of change (install, update or discover_install)
 *
 * @return void
 */
function postflight($type$parent
{
echo '<p>Anything here happens after the installation/update/uninstallation of the component</p>';
}
}
: Re:Override della lingua da appendere e non sovrascrivere
: Claudio Romeo 05 Jul 2017, 10:07:24
Grazie, giovi.
Mi rimane però un dubbio.
class com_TuoComponenteInstallerScript
Da quel che capisco (ma su questo sono proprio un novellino) stai parlando di un componente, mentre io non devo installare alcun componente: solo copiare/appendere file di lingua xx_XX.override.ini.
Non vorrei che con le istruzioni che mi hai suggerito qualcosa andasse storto o che Joomla creasse automaticamente una voce nel menu Componenti.
Hai modo di chiarirmi meglio questo punto?
Per il resto, farò tutte le prove del caso.
Grazie ancora.
: Re:Override della lingua da appendere e non sovrascrivere
: giovi 05 Jul 2017, 10:14:36
Tu che tipo di estensione stai distribuendo?

Se non è un'estensione riconosciuta da joomla non capisco la necessità del manifest.

Quella che stai cercando di fare non è una cosa standard quindi dovrai comunque trovare un workaround
: Re:Override della lingua da appendere e non sovrascrivere
: Claudio Romeo 05 Jul 2017, 10:33:15
OK, mi spiego meglio.
Sto scrivendo un Quaderno (come quelli che trovi sul sito di VirtueMart Matters (https://www.virtuemartmatters.com/pubblicazioni.html)) che spiega come rendere più bello il carrello di VirtueMart.
Tra le modifiche proposte, c'è anche l'inserimento di alcuni testi per rendere il carrello più chiaro e leggibile.
Per far sì che questa cosa funzioni anche con i negozi multilingua, non uso testi fissi, ma variabili di lingua da inserire nei file xx_XX.override.it.
Mi piacerebbe dare al lettore la possibilità di installare con un'unica procedura questi file, appendendoli a quelli eventualmente già presenti.
Inoltre, mi piacerebbe farlo mediante una procedura già conosciuta agli utenti di Joomla, in modo da semplificare al massimo le cose. Ecco perché il file manifest.xml.
Questa procedura la uso con successo per l'installazione di viste e di sublayout personalizzati. Questi però usano nomi univoci e non c'è probabilità che vadano a sovrascrivere file esistenti.
Il problema sono proprio i file di override della lingua, che potrebbero essere già presenti nel sito di destinazione. Perciò, le mie variabili di lingua non devono sostituire i file già esistenti ma appendersi ad essi.
Purtroppo mi pare di capire che il file manifest.xml preveda per method solo install e upgrade e non anche un (ipotetico) append.
E qui mi blocco...
: Re:Override della lingua da appendere e non sovrascrivere
: giovi 05 Jul 2017, 22:51:55
Install ed upgrade servono a dire a Joomla come gestire l'installazione nel caso l'estensione sia già stata installata, non è legato ai singoli file. Per me devi optare per lo script php perché quello che vuoi fare non è una cosa standard. Php comunque gestisce abbastanza bene i file .ini per cui puoi fare anche in modo che le modifche vengano cancellate quando elimini l'estensione!
edit: quel codice dovrebbe andar bene per qualunque tipo di estensione, che sia componente modulo o languagepack non fa differenza
: Re:Override della lingua da appendere e non sovrascrivere
: Claudio Romeo 06 Jul 2017, 10:23:03
OK, grazie.
Farò le prove e vedo che cosa succede!