it-swarm.dev

Come caricare JPATH_BASE nel mio modulo?

Sto creando un nuovo modulo di menu, ma continuo a riscontrare lo stesso problema.

Sto cercando di rendere il mio foglio di stile variabile, prendendo i parametri che le persone possono compilare nel pannello di amministrazione e inserendoli nel mio foglio di stile. Per fare ciò, il foglio di stile è in realtà un PHP. Tuttavia, quando provo a definire JPATH_BASE, ecco come risulta:

C:\xampp\htdocs\sandbox\joomlaStands\modules\mod_improvedmenu\assets\css/../../../

ecco il codice:

<?php header("Content type: text/css; charset: ISO-8859-1");

define( 'DS', DIRECTORY_SEPARATOR );
define( '_JEXEC', 1 );
define('_VALID_MOS',1);
define('JPATH_BASE', dirname(__FILE__). '/../../../');
define('JPATH_PLATFORM', dirname(__FILE__). '/../../../'. 'libraries');

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$user =& JFactory::getUser();
$session =& JFactory::getSession();

jimport('joomla.application.module.helper');

$module = JModuleHelper::getModule('mod_improvedmenu');
$params = new JRegistry();
$params->loadString($module->params);

?>

.main-menu-bar {

    background-color: <?php  
        if($params->get('entireMenuBgColor') != "") {
            echo "".$params->get('entireMenuBgColor')."";
        }
    ?>;

    <?php 
        if($params->get('backgroundImage') != "-1") {
            echo "background-image: url('". JURI::ROOT(false, "")."images/menu/".$params->get('backgroundImage').";";
        }

    ?>

    background-repeat: repeat-x;

    <?php if($params->get('font-style') != "-1") {
        echo $params->get('font-style');    
    } else { 
        echo "normal"; 
    }   ?>;

    <?php if($params->get('font-family') != "") {
        echo "font-family: ".$params->get('font-family')."";
    }   ?>

}

Il fatto è che il codice utilizzato per funzionare in una versione precedente del modulo. Cosa sto sbagliando e come posso definirlo correttamente?

1
Hocho

Hai fatto tutto questo in modo completamente sbagliato. Non è necessario importare l'API Joomla per un file che verrà utilizzato per lo styling.

Tutto il tuo stile basato su parametri dovrebbe andare nel file default.php e sarà 10 volte più facile da mantenere.

In questo file, puoi sfruttare appieno la funzione addStyleDeclaration() di Joomla.

Quindi passo 1, rimuovi completamente il tuo separato PHP. Abbandonalo e non guardarlo mai indietro.

Passaggio 2, supponendo che tu abbia già un file default.php (in caso contrario, creane uno), aggiungi quanto segue:

$doc = JFactory::getDocument();

$css = '
    .main-menu-bar {    
        background-color: ' . $params->get("entireMenuBgColor", "DEFAULT_VALUE") . ';
        background-image: url(' JUri::root() . 'images/menu/' . $params->get("backgroundImage", "DEFAULT_VALUE") . ') ;
        background-repeat: repeat-x;        
        font-style: ' . $params->get("font-style", "DEFAULT_VALUE") . ';        
        font-family: ' . $params->get("font-family", "DEFAULT_VALUE") . ';
    }
';

$doc->addStyleDeclaration($css);

Ho aggiunto in DEFAULT_VALUE che puoi sostituire. Ciò imposterà un valore predefinito se non è presente alcun valore per il parametro.

Come puoi vedere, metodi di codifica molto piacevoli, molto più piccoli e non è necessario importare l'API che ridurrà semplicemente la velocità di caricamento della pagina.

Spero che sia di aiuto

2
Lodder