it-swarm-ja.tech

モジュールにJPATH_BASEをロードする方法は?

新しいメニューモジュールを作成していますが、同じ問題が発生し続けています。

私は、ユーザーが管理パネルで入力できるパラメータを取得してスタイルシートに配置することで、スタイルシートを変数にしようとしています。そうするために、スタイルシートは実際にはPHPファイルです。しかし、JPATH_BASEを定義しようとすると、次のようになります。

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

これがコードです:

<?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')."";
    }   ?>

}

ものは、古いバージョンのモジュールで動作するために使用されたコードです。私は何を間違っているのですか、どうすれば適切に定義できますか?

1
Hocho

あなたはこれについて完全に間違った方法で行ってきました。スタイリングに使用するファイルのJoomla APIをインポートする必要はありません。

パラメータに基づくすべてのスタイリングはdefault.phpファイルに入力する必要があり、保守が10倍簡単になります。

このファイルでは、JoomlaのaddStyleDeclaration()関数を最大限に活用できます。

したがって、ステップ1で、別のPHPファイルを完全に削除します。それを破棄し、決して振り返ってはなりません。

ステップ2 default.phpファイルがある場合(作成していない場合)、次を追加します。

$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);

DEFAULT_VALUEに追加しましたが、これは置き換えることができます。パラメータの値がない場合、これはデフォルト値を設定します。

ご覧のとおり、ニースのコーディング方法は多く、はるかに小さく、APIをインポートする必要がないため、ページの読み込み速度が低下します。

お役に立てれば

2
Lodder