0

私はartisteerテンプレートでjoomla 2.5を使用しています.製品のリストを表示およびソートするカスタムコンポーネントを作成しました.製品自体もコンポーネントの一部であり、データベースに保存されます. 私がやろうとしているのは、if条件に従って、特定の製品または製品カテゴリに異なるボディ背景を設定することです

if (product_category == 1):
   <body id="background1">
   ...

しかし問題は<body id="someID">、コンポーネントがロードされる前に template.php に がロードされるため、コンポーネントにボディの背景を設定しても背景が変更されないことです。ただし、template.php から body css id 宣言を削除し、<body>代わりにそのままにしておくと<body id="someID">、コンポーネント<body id...>宣言は背景を正しく設定しますが、コンポーネントに関連しない他のページには空白の白い背景があります。

私がする必要があると思うのは、背景が他の場所で定義されていない場合に備えてデフォルトの背景を設定する方法を見つけることです。または、何らかの方法で現在の背景をオーバーライドして、ボディの背景を再度コンポーネントにロードするようにします。少しの助けと私の指導で、私は自分の道を見つけることができると思います:)どんな助けも大歓迎です!!! ありがとう!

4

4 に答える 4

0

次のようなことを試してください。

<?php
$doc = JFactory::getDocument();
  if(product_category == 1){
     $css = 'body {'
           .'background: url(' . JURI::root() . 'components/com_yourcomponent/file.jpg) !important;'
           .'}';
     $doc->addScriptDeclaration($css);
  }    
?>

背景のパスをニーズに合わせて変更する必要があります。

お役に立てれば

于 2013-02-28T15:33:55.327 に答える
0

実際には、メニュー項目で組み込みのページ クラス サフィックス パラメーターを使用するだけで、目的を達成できます。カスタム テンプレートがある場合は、これを追加します。

<?php
$app = JFactory::getApplication('site');
$params =  & $app->getParams('com_content');
$pageclass = trim($params->get('pageclass_sfx'));
?>
<body id="<?php echo $pageclass ? $pageclass : 'default'; ?>">

評判の良いテンプレート開発者のほとんどには、ページ クラス サフィックスのコードが含まれているため、カスタマイズするページのパラメーターに何かを追加する以外に何もする必要がない場合があります。

body タグに ID を追加することで、ページ上の任意の CSS を簡単かつ正確にオーバーライドできます。

于 2013-03-04T21:35:03.753 に答える
0

@marko と @Lodder さん、返信ありがとうございます。残念ながら、スタイルシートはコンポーネントの前に読み込まれるため、テンプレートコードからの新しいデザイン変更はテンプレートデザインに影響を与えないため、提供したソリューションは機能しませんでした。残念ながら、template.php はコンポーネントの veriables (Category_id など) を初期化できないため、条件を作成して、category_Id を確認し、それに応じて背景を変更することはできません... コンポーネント コード内にこのコードを実装する簡単な解決策を見つけました。 :

app =& JFactory::getApplication();

if ($category_id == 1) $app->setTemplate("template2");
そうしないと ....

$this は単に category_id に従って新しいテンプレートを設定します。これはメモリ効率が悪く、読み込み時間が長くなることはわかっています。最悪の部分は、カテゴリごとに新しいテンプレートを作成する必要があることです...しかし、これでうまくいきます。 .. より良い解決策を考えていただければ幸いです。

どうもありがとうございました!

于 2013-03-04T17:29:08.987 に答える
0

template.php ファイルでは、body がロードされる前に、次のようにすることができます。

if (JRequest::getCmd('option') == 'com_mycontent'){
    echo '<body id="myid">';
}
else
    echo '<body id="anotherid">';
于 2013-02-28T15:35:47.523 に答える