回答編集履歴

2 間違い訂正 紛らわしい間違いしてすみません(;・ェ・)

Sora-tan

Sora-tan score 622

2016/05/02 21:47  投稿

選抜メーカーリスト用のブロックを追加して
templateに渡す前に配列をフィルタリングしたほうがいいと思います。
--------------以下 追記--------------
私ならこうするかな?..的なところを大まかに追記しておきます
Smartyにはtemplate上で`array_unique`を実行する関数は用意されていませんので
あらかじめ 必要なデータを絞り込んで 配列を作り直す必要があると思います、
まず、EC-CUBEの管理画面→デザイン設定→ブロック設定から ブロックを新規に作成
(ここでは仮にブロック名:メーカーリスト ファイル名:maker_list.tplとします)
データベースの`dtb_bloc`テーブルに追加された`メーカーリスト`のレコード上で`php_path`フィールドにphpのパスを指定します。
(何処のディレクトリでも構いませんがここでは解かり易く仮に `frontparts/bloc/maker_list.php`とします)
EC-CUBE内のディレクトリ`html`→`frontparts`→`bloc`フォルダーにデータベースの`dtb_bloc`で指定した`maker_list.php`を設置します。
一先ずここまでの操作で 管理画面→デザイン設定→レイアウト設定で必要なページに`メーカーリストブロック`を配置すれば`maker_list.php`の内容がサイト内に表示されるようになります。
`maker_list.php`の内容ですが..今回は登録済みのデータを抜粋して表示するだけですので、面倒なEC-CUBE独自の手順を踏んでテンプレートを介さなくても
PHPで直接データを出力してセキュリティー上、何の問題もないと思います。
```php
<?php
if(isset($_GET['category_id'])){
・・・・・・・・・//`$_GET['category_id']`にエスケープ処理くらいは必要
}else{
・・・・・・・・・
}
require_once realpath(dirname(__FILE__)) . '/../../../data/config/config.php';
//(data/frontparts/bloc/からのパスを想定 EC-CUBEで登録したDB情報の定数を取得)
   try {
       $pdo = new PDO(DB_TYPE.':host='.DB_SERVER.';dbname='.DB_NAME.';charset=utf8',DB_USER,DB_PASSWORD,array(PDO::ATTR_EMULATE_PREPARES => false));
       //これで繋がるはずです。
       $pdo->query('SET NAMES utf8');
       $stmt = $pdo->query("********");
       
       ・・・・・・・・・
       ・・・・・・・・・
       ・・・・・・・・・
   } catch (PDOException $e) {
       exit($e->getMessage());
   }
//あとは`foreach`なりなんなりで`echo `なり`print`なり
```
   
   
//こんな感じで必要な処理を記述してください。
ちなみに.`dtb_products`テーブルと`dtb_category`テーブルは `dtb_products`の`maker_id`フィールドで直接紐付されていますが`dtb_category`は`dtb_products_class`で繋がってます。
ちなみに.`dtb_products`テーブルと`dtb_maker`テーブルは 双方の`maker_id`フィールドで直接紐付されていますが`dtb_category`は`dtb_products_class`で繋がってます。
DBの構造は`docs`フォルダ内に`table_definition.xls`で保存されてますから確認してください。
1 追記でぇ~~っす

Sora-tan

Sora-tan score 622

2016/04/28 22:39  投稿

選抜メーカーリスト用のブロックを追加して
templateに渡す前に配列をフィルタリングしたほうがいいと思います。
templateに渡す前に配列をフィルタリングしたほうがいいと思います。
--------------以下 追記--------------
私ならこうするかな?..的なところを大まかに追記しておきます
Smartyにはtemplate上で`array_unique`を実行する関数は用意されていませんので
あらかじめ 必要なデータを絞り込んで 配列を作り直す必要があると思います、
まず、EC-CUBEの管理画面→デザイン設定→ブロック設定から ブロックを新規に作成
(ここでは仮にブロック名:メーカーリスト ファイル名:maker_list.tplとします)
データベースの`dtb_bloc`テーブルに追加された`メーカーリスト`のレコード上で`php_path`フィールドにphpのパスを指定します。
(何処のディレクトリでも構いませんがここでは解かり易く仮に `frontparts/bloc/maker_list.php`とします)
EC-CUBE内のディレクトリ`html`→`frontparts`→`bloc`フォルダーにデータベースの`dtb_bloc`で指定した`maker_list.php`を設置します。
一先ずここまでの操作で 管理画面→デザイン設定→レイアウト設定で必要なページに`メーカーリストブロック`を配置すれば`maker_list.php`の内容がサイト内に表示されるようになります。
`maker_list.php`の内容ですが..今回は登録済みのデータを抜粋して表示するだけですので、面倒なEC-CUBE独自の手順を踏んでテンプレートを介さなくても
PHPで直接データを出力してセキュリティー上、何の問題もないと思います。
```php
<?php
if(isset($_GET['category_id'])){
・・・・・・・・・//`$_GET['category_id']`にエスケープ処理くらいは必要
}else{
・・・・・・・・・
}
require_once realpath(dirname(__FILE__)) . '/../../../data/config/config.php';
//(data/frontparts/bloc/からのパスを想定 EC-CUBEで登録したDB情報の定数を取得)
   try {
       $pdo = new PDO(DB_TYPE.':host='.DB_SERVER.';dbname='.DB_NAME.';charset=utf8',DB_USER,DB_PASSWORD,array(PDO::ATTR_EMULATE_PREPARES => false));
       //これで繋がるはずです。
       $pdo->query('SET NAMES utf8');
       $stmt = $pdo->query("********");
       
       ・・・・・・・・・
       ・・・・・・・・・
       ・・・・・・・・・
   } catch (PDOException $e) {
       exit($e->getMessage());
   }
//あとは`foreach`なりなんなりで`echo `なり`print`なり
```
   
   
//こんな感じで必要な処理を記述してください。
ちなみに.`dtb_products`テーブルと`dtb_category`テーブルは `dtb_products`の`maker_id`フィールドで直接紐付されていますが`dtb_category`は`dtb_products_class`で繋がってます。
DBの構造は`docs`フォルダ内に`table_definition.xls`で保存されてますから確認してください。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る