2017-09-30 6 views
2

Je veux être capable d'utiliser php pour définir les valeurs dans le fichier configuration.php de Joomla 3.x.Utiliser php pour mettre à jour le fichier de configuration joomla

je peux obtenir des valeurs assez facilement avec quelque chose comme:

$config = new JConfig(); 
$dbprefix = $config->dbprefix; 

J'ai cherché, mais ne trouve aucun moyen de fixer la valeur. Je suppose que c'est possible puisque joomla le fait. Je peux lire le fichier entier et utiliser PHP pour rechercher et remplacer mais j'espère que Joomla a une API avec un setter ou similaire pour me permettre de le faire.

J'ai cherché et cherché, mais il n'y a rien que je puisse trouver

Aide!

ta

J'ai aussi maintenant essayé d'ajouter un setter au JConfig mais cela ne semble pas fonctionner!

public function setTestvar($testvar) { 
    $this->ftp_user = $testvar; 
} 

Répondre

1

Malheureusement, je ne connais pas Joomla! mais j'ai jeté un coup d'oeil au code source sur GitHub et il semble y avoir quelques fonctionnalités qui font ce que vous voulez dans ConfigModelApplication::writeConfigFile() qui prend une instance Joomla\Registry\Registry.

Cette classe est définie dans le fichier administrator/components/com_config/model/application.php

Je suppose que vous utilisez une version récente de Joomla! et je n'ai pas testé cela donc YMMV.

est ici la méthode en question:

/** 
* Method to write the configuration to a file. 
* 
* @param Registry $config A Registry object containing all global config data. 
* 
* @return boolean True on success, false on failure. 
* 
* @since 2.5.4 
* @throws RuntimeException 
*/ 
private function writeConfigFile(Registry $config) 
{ 
    jimport('joomla.filesystem.path'); 
    jimport('joomla.filesystem.file'); 

    // Set the configuration file path. 
    $file = JPATH_CONFIGURATION . '/configuration.php'; 

    // Get the new FTP credentials. 
    $ftp = JClientHelper::getCredentials('ftp', true); 

    $app = JFactory::getApplication(); 

    // Attempt to make the file writeable if using FTP. 
    if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644')) 
    { 
     $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'), 'notice'); 
    } 

    // Attempt to write the configuration file as a PHP class named JConfig. 
    $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false)); 

    if (!JFile::write($file, $configuration)) 
    { 
     throw new RuntimeException(JText::_('COM_CONFIG_ERROR_WRITE_FAILED')); 
    } 

    // Attempt to make the file unwriteable if using FTP. 
    if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444')) 
    { 
     $app->enqueueMessage(JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'), 'notice'); 
    } 

    return true; 
} 

Hope this helps :)