web-dev-qa-db-ja.com

Virtuemart-ルートからカテゴリを表示してカテゴリ製品を閲覧する

Virtuemart 3.0.4 Joomla 3.3.6。

私はvirtuemartで以下をセットアップする方法を理解しようとしています。

タイプVMカテゴリレイアウトのメニュー項目を含むメインストアのビューがあります。すべてのカテゴリを表示するように設定されており、最上位のカテゴリがルートカテゴリです。

ページにはすべてのカテゴリが表示されます。ここで、カテゴリをクリックして、それを開きたいCategory's Browse Productsビューを開きます。

しかし、これは起こっていません。


手がかり1:
問題は、上記の両方のビューが同じメニュー項目によって制御されていることです。このメニュー項目には、「ページレイアウト」というオプションがあり、オプションはCategories、またはDefaultです。

Categoriesは親カテゴリの子カテゴリを表示し、Defaultはカテゴリの製品を表示します。

私のメニュー項目では、すべてのカテゴリを表示するために、これをカテゴリに設定しています。


手がかり2:
専用のメニュー項目のないすべてのカテゴリは、そのビューからクリックすると、同じitemidで開きます。ただし、ビューはそのメニュー項目(カテゴリを表示するように設定)からページレイアウト設定を継承しているようで、選択したカテゴリの製品一覧ビューは表示されません。



私は、各カテゴリのメニューアイテムを作成しないようにします。これは、店主がカテゴリを変更するのが簡単になり、メニューアイテムにまったく触れることなく、フロントエンドで自動的に更新されるためです。 。

これに対処するためにオーバーライドを作成することを考えていますが、最初に明らかなものを見落とさないようにしたいと思います。

VM?でこの状況に遭遇したことがありますか?または、これがどこかで "ばかげた"設定である可能性はありますか?

1
FFrewin

実際、オーバーライドのアイデアに従うことは非常に簡単です。そして、VM開発者がこれを現状のまま残している理由を理解できません。

CategoriesビューのCategoriesテンプレートファイル:

(components/com_virtuemart/views/category/tmpl/categories.php)  

ブラウジングワークフローに連続性を作成するには、次のようなコード行を追加するだけです。

else { include ('template') } 

現在カテゴリテンプレートは、カテゴリに他の子カテゴリがあるかどうかをチェックし、ある場合はそれらをロードします。ただし、カテゴリに子カテゴリがない場合は何もありません。

したがって、カテゴリオーバーライドテンプレートファイルでは、ifステートメントをelseで続行し、デフォルトテンプレートを含めて、カテゴリに子カテゴリがない場合にカテゴリの製品を表示できます。

テンプレートは次のようになります:

if ($this->category->haschildren) {

    // Calculating Categories Per Row
    //$categories_per_row = VmConfig::get ( 'categories_per_row', 3 );

    // Start the Output
    echo ShopFunctionsF::renderVmSubLayout('categories',array('categories'=> $this->category->children));

} 

 // Add these lines to include the default template.
else {
    include('default.php');
}

テンプレートのoverridesフォルダ内に両方のファイルをコピーすることを確認してください。

最後に、メニュー項目の設定を調整して、目的の製品レイアウトで製品を表示します。

2
FFrewin