ロッカールーム

科目一覧

EC-CUBEのためのレンタルサーバー「EC-CUBEのサーバー」 会員登録(無料)はこちら
サイトマップ ご意見箱

カテゴリ毎に異なる説明文や画像を表示する(PostgreSQL版)

カスタマイズ講座

ホーム > カスタマイズ講座 > 【上級】カスタマイズ > カテゴリ毎に異なる説明文や画像を表示する(PostgreSQL版)
【上級】カスタマイズ3
2008.10.28 (更新日: 2009.10.28)

カテゴリ毎に異なる説明文や画像を表示する(PostgreSQL版)

【用意するもの】
・EC-CUBE2系がインストールされたサーバ・・・1アカウント
・PHPのクラス・継承に関する知識
・もっとサイトを充実させたいという気持ち


皆さんこんにちは、穂満です。
腸の調子を整えようと飲むヨーグルトを飲んだら、逆におなかをこわしてしまった穂満です(腸が活発になったから?とも思えますが)


さて今回は、前々から人気のあった機能である「カテゴリ毎に異なる説明文や画像を表示する」の料理になりますよ~。ちなみにこの記事は2系(※2.2.0-betaベース)向けになりますので、1系の方は「カゴラボ的EC-CUBE開発ブログ - カテゴリ毎に説明文等のコンテンツを表示する」をご覧ください。


調理例
まずは、フロント側のイメージです(参考例: みやざき便.com)

調理例(フロント)


次は、管理画面側です。カテゴリ管理の画面で登録できるようにします。画像はコンテンツ管理のファイル管理からアップし、imgタグで呼び出すようにします。

調理例(管理画面:カテゴリ管理)


何を学ぶんですか
前回の「EC-CUBEのモバイルサイトで、PCサイトとは異なる詳細コメントを表示させる」と同様ですが、管理画面に新しいフィールドを追加し、データベースに登録する方法と表示する方法を学びます。

作業の内容と流れは以下のようになります。
  1. データベースにカラム追加
  2. /data/Smarty/templates/default/admin/products/category.tplを編集
  3. LC_Page_Admin_Products_Category_Ex.phpの編集
  4. LC_Page_Products_List_Ex.phpの編集
  5. list.tpl(商品一覧ページテンプレート)の編集



(2ページへ続く)

ここから先は、会員限定の特別公開記事になっております。
ここから先は、会員限定の特別公開記事になっております。
ここから先は、会員限定の特別公開記事になっております。

レビュー

レビューによるご意見・ご質問は会員登録された方のみとなっております。
  • 2.3.0では上記内容の部分がないのですが 2008/11/07
    レビュアー:yuko

    すごく参考にさせていただいています。
    2.3.0バージョンだとどこになりますか?

    教えて下さい!!!

  • なんとなくですが~ 2008/11/13
    レビュアー:pin.ch

    管理画面の説明文を入力する部分はテキストエリアなので、改行を入れる方もいると思います。
    今回のこのカスタマイズは改行されずに表示されてしまうので、出力時に「\r\n」を「<br />」に置換してあげるといいかもしれませんねー
    (私が使用しているのはver2.3.2)

    次回も楽しみにしてます^^

  • 先程の・・・ 2008/11/13
    レビュアー:Pin.ch

    改行コードを置換するよりも、

    |nl2br

    使った方が確実早いですね。
    すいませんでしたー

  • ご意見ありがとうございます! 2008/11/13
    レビュアー:homan

    >Pin.ch さん

    確かに勝手に<br />が入ると便利なのですが、
    結構ヘビーにHTML書かれる方の場合、逆に<br />が自動で入ると邪魔になることがあるんですよね。

    たんにテキストなどであれば「|nl2br」でOKですね^^

  • ★★★ システムエラー来ましたo(;△;)o 2008/11/19
    レビュアー:misawa331

    参考させてもらいチャレンジしたところ、
    ver2.32だと編集or登録押したあとシステムエラーを返します。画面表示はうまくいってるので、lc_page_admin_products_category_ex.phpのどこかで、エラーが起きてるんじゃないかと思うんですけど、もし何か解決策があれば教えてください。

  • システムエラーと表示される場合は・・・ 2008/11/20
    レビュアー:homan

    /data/logs/site.log にエラー内容が出ていると思います。まずは、そちらの内容を確認してみてください。

    どこでエラーが起きているのかはログをみれば見当が付くかとおもいます。

  • ★★★ 自己完結しました・・・m(_ _)M 2008/12/07
    レビュアー:misawa331

    テーブルのカラム名の登録が間違ってました。

    x: flag //で登録してた(汗
    o: flg

    ログみたら載ってました。

  • ★★★★★ とても助かっています。 2008/12/17
    レビュアー:tonton

    こちらの記事は実装もすんなり行って、本当に助かっています★
    本当に、すばらしいです。
    homanさん、いつもありがとうございます!
    感謝の気持ちをこめて、もちろん★5つでございます。

    余談ですが、実は、このカテゴリの説明追加でカスタマイズするところが、結構よく使わせて頂く、
    www.gnnk.net/20080113050103/
    こちらの、パンくずリストの実装とガチンコしてまして、カスタマイズする順番とか、class_EXか本体のclassのどっちで拡張するかとか、ちょっと注意しておかないと、いけないみたいです。

    EC-CUBEは、結構カスタマイズとかで触るファイルが多くなってしまうので、この履歴管理とか、マージの仕方に頭を悩ませています。
    ナイスな方法はありませんでしょうかね;

  • ★★★ ver2.3xで 2009/01/09
    レビュアー:kosshi

    とても参考になります。
    私もぜひ!とチャレンジしてみましたが、2.3ではスクリプトが若干違うみたいで、むりやりはめ込んでも何も変化が出ませんでした;
    残念です。2.3verを是非お願いしたいです。

  • 2.3でも使えるはずだとはおもうのですが・・・ 2009/01/09
    レビュアー:homan

    >kosshiさん

    うまくいきませんでしたか? extends(拡張用)のPHPファイル等の関係性がよくわからないと難しいかもしれませんね・・・。基本的に2.3でも利用できるはずなのですが、、、。

    このネタは今度出る予定のEC-CUBE本に載せてもらえたらいいな~とおもっておりますので、その際に2.3.2の場合でのカスタマイズ部分が明らかになるかもしれません(あくまでも予定です)。

  • ★★★★★ とってもお役立ちです★ 2009/02/04
    レビュアー:tonton

    homanセンセイ、いつも本当にありがとうございます。
    このカテゴリコメント、すごく重宝しています。
    ほんとにいつも助かる情報をありがとうございます!!!

    使っているうちに、実はちょっと欲が出てしまったのですが、携帯サイトで同じようにカテゴリコメントを表示させるのは難しいでしょうか?

  • 使えると思います! 2009/02/05
    レビュアー:homan

    携帯用にまた別のフィールドを作った方がいいかとは思いますが、携帯側にも組み込めるとおもいます。

    ちょうど今、少しずつ携帯側にも力を入れているので、ネタにできるようになったらご紹介したいと思います(先に実現されてしまうかもしれないですが(笑))

  • ★★★★★ ありがとうございます 2009/03/08
    レビュアー:えびな

    大変重宝しております。
    本当に感謝です。

    携帯版も、心待ちにしております。

    教えていただいてばかりで恐縮ですが…m(__)m

  • ★★★★ 最高ですね 2009/04/10
    レビュアー:tmy

    この学校のおかげで、
    サイコーな週末になりそうです

  • ★★★★★ 検索でエラー 2009/04/15
    レビュアー:swimc

    こちらに登録後、早速導入させていただきました。Ver.2.3.4ですが、こちらの機能は正常に動作しているようです。
    しかしながら、検索で「全ての商品」を対象カテゴリにして検索すると、システムエラーが起きるようになってしまいました。カテゴリを指定して検索をすると正常に動作します。
    そこで、こちらで編集した「LC_Page_Products_List.php」を編集前に戻すと検索は正常に動作しました。また、こちらで追加した機能もそのまま正常に動作しているようです。
    このまま、LC_Page_Products_List.phpを編集前の状態で使っていて良いものか迷っていますがどうでしょうか・・・。他の方はこういった問題は起きてないですか?

  • /data/logs/site.logを確認できますか? 2009/04/15
    レビュアー:homan

    システムエラーの場合、/data/logs/site.logにエラーが記録されるのですが、確認できますか?

    正常に動いているようならば大丈夫だとおもうのですが、念のため確認お願いします。

  • ★★★★★ Logをチェックしてみました。 2009/04/15
    レビュアー:swimc

    当該のエラーを分かりやすくするために、一度Logをクリアして、エラーが出たのと同じ状況で試してみたところ、今度は「全ての商品」で検索が動いたものの、同じ商品が二つ表示されるという不具合が起きました。エラーには何も記録されませんでした。
    LC_Page_Products_List.phpを元に戻したら、正常に戻りました。
    このまま使っていても、動作の不具合はなさそうですが、いまいち気持ち悪いですね(^^;。

  • ★★★★★ LC_Page_Admin_Products_Category_Ex.phpの追加修正箇所について 2009/04/15
    レビュアー:ai

    この記事の内容を実装したくて、調べていたところコミュニティからこの記事のリンクにたどりつき早速登録させていただきました。

    とても役に立つ内容ですので、ぜひ使わせていただきたいのですが、3ページ目のphpの編集でエラーが出て先にすすめないでいます。

    ご教示いただけると助かります。

    2.3.0バージョンを使っています。LC_Page_Admin_Products_Category_Ex.phpを編集後、管理画面>カテゴリ管理>カテゴリ設定で編集を押すとエラーが出てしまいます。

    logをみると\data\module\DB\mysql.php 324:DB_mysql->mysqlRaiseError
    data\module\DB\mysql.php 894:DB_common->raiseError
    data\module\DB\common.php 1853:PEAR->raiseError
    data\module\PEAR.php 557:DB_Error->DB_Error
    data\module\DB.php 893:PEAR_Error->PEAR_Error

    という内容でした。

    phpの初心者な為どこをなおしていいのか検討がつきません。

  • 誤動作ありました。 2009/04/17
    レビュアー:swimc

    こちらを適応する前に、チェンジセット 17853を適応していたのですが、その機能が無効化されていました。ためしに、チェンジセット 17853のみを適用したLC_Page_Products_List.phpをUPしてみたところ、システムエラーになりました。
    こちらのエラーのログを見てみましたが、どこを直せば良いのかさっぱりです(^^;。
    チェンジセット 17853とこちらの機能を適応した状態で使用した際に、全てのカテゴリで検索すると、どうやら登録したカテゴリの数だけ同じ商品が重複して検索結果として出てきてしまっているようです。

  • 返信致します。 2009/04/17
    レビュアー:homan

    >ai さん

    そのログの何行か前にエラーの詳細の内容が含まれているはずなのですが、それを開示して頂くことは可能ですか?

    この記事はPostgreSQLを基準にしているのですが、エラーの内容からみるとMySQLをお使いのように思います。MySQLの環境はないのですが、調べられるところまで調べたいと思いますので、よろしくお願いします。


    >swimc さん
    貴重な情報をありがとうございます!私のほうでも再現するか試してみようと思います。すぐすぐにはできないのですが、追加で情報などございましたらお知らせいただけると幸いです。よろしくお願いいたします!

  • ★★★★★ 2.4.1でチャレンジしたのですが 2009/07/14
    レビュアー:nom

    何とかこのカスタマイズを導入したいのですが管理画面からカテゴリーの編集は出来るのですが、新規登録時にエラーが発生します。どうしたらいいか教えてください。

    INSERT INTO dtb_category(category_name,category_info,info_flg,create_date,update_date,creator_id,parent_category_id,rank,level) VALUES (?,?,?,Now(),Now(),?,?,?,?)
    DB Error: constraint violation

    INSERT INTO dtb_category(category_name,category_info,info_flg,create_date,update_date,creator_id,parent_category_id,rank,level) VALUES ('テスト',NULL,NULL,Now(),Now(),'2','0',81,1) [nativecode=1048 ** Column 'category_info' cannot be null]

    /Users/004/Sites/html/admin/products/category.php 34:LC_Page_Admin_Products_Category_Ex->process
    /Users/004/Sites/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Category_Ex.php 95:LC_Page_Admin_Products_Category_Ex->lfInsertCat
    /Users/004/Sites/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Category_Ex.php 257:SC_Query->insert
    /Users/004/Sites/data/class/SC_Query.php 271:SC_DbConn->query
    /Users/004/Sites/data/class/SC_DbConn.php 78:DB_common->query
    /Users/004/Sites/data/module/DB/common.php 1162:DB_common->execute
    /Users/004/Sites/data/module/DB/common.php 959:DB_mysql->simpleQuery
    /Users/004/Sites/data/module/DB/mysql.php 324:DB_mysql->mysqlRaiseError
    /Users/004/Sites/data/module/DB/mysql.php 894:DB_common->raiseError
    /Users/004/Sites/data/module/DB/common.php 1853:PEAR->raiseError
    /Users/004/Sites/data/module/PEAR.php 557:DB_Error->DB_Error
    /Users/004/Sites/data/module/DB.php 893:PEAR_Error->PEAR_Error

  • NULL許可して下さい。 2009/07/14
    レビュアー:homan

    nativecode=1048 ** Column 'category_info' cannot be null

    おそらくNOT NULL にチェックがはいっているのではないでしょうか?

  • それもチェックしました。 2009/07/15
    レビュアー:nom

    >homan

    早速のお返事有難うございます。
    残念ながらそれはチェック済みです。
    他におかしなところはないでしょうか?
    PHPについては殆ど素人ですので助けてください。

  • ★★★★★ 2.4.1でも普通にカスタマイズできました! 2009/07/21
    レビュアー:アロハ

    特に難なく2.4.1でもカスタマイズできましたって報告です!

    nomさんのはcategory_infoがNOT NULLになっているっぽいエラーですけどね。

    PostgreSQLなら、「\d dtb_category」
    MySQLなら、「desc dtb_category」

    を発行して調べてみた方がいいのでは?

  • フォームからのデータの格納について 2009/08/08
    レビュアー:kaoring

    いつも参考にさせてもらっています。

    EC-CUBE 2.4.1
    DBサーバ MySQL 5.0.77
    WEBサーバ Apache/1.3.41 (Unix)
    PHP 5.2.9

    環境下で実装したところ、下記現象が起こっておりどの部分が間違っているのか分りません。
    phpmyadomin上からcategory_infoの情報を入れることは可能でサイト上の表示もできています。
    しかし、管理画面上で格納されているデータを読み込むことは可能ですが、編集し保存を押しても変更されません。
    データの受け渡しに問題があるのでしょうか。
    category.tplを色々変更してみましたが、やはりダメで途方にくれています。
    どなたかご教授頂けませんでしょうか。

  • データの受け渡しについて 2009/08/10
    レビュアー:kaoring

    いつも参考にさせてもらっています。

    下記環境下で設定を行ったのですが、どうもデータの受け渡しでうまくいかない状況です。

    ======================
    EC-CUBE 2.4.1
    DBサーバ MySQL 5.0.77
    Apache/1.3.41
    PHP/5.2.9
    ======================

    現状は、mysqladminにてデータベースに直接データを入れると画像と説明文が繁栄される。管理画面のカテゴリ説明も表示される。

    不具合部分。
    管理画面にて、カテゴリ説明を編集し登録ボタンを押しても繁栄されない。

    どの部分に問題があるのかわからず途方にくれています。
    どなたかご教授ください。

  • ★★★★★ 私も2.4.1で正常検証確認しました。 2009/08/28
    レビュアー:みらるぱ

    紹介されている手順に沿ってやってみました。

    特にエラーもなく正常に作動しているようです。

    DBは以下です。

    PostgreSQL 7.4.18

  • ★★★★★ 使わせていただきました。 2010/01/12
    レビュアー:kagura

    とても参考にさせていただいてます。手順通り実装し上手くいきました。ほんとうにありがとうございます。
    カテゴリ毎に説明文を入れる箇所を2箇所設けたく、あれこれ自分なりにカスタマイズしましたが、どうも上手くいきません。ぜひ情報いただけないでしょうか?
    DBはMySQL使用しています。

  • 子カテゴリ名がメインコンテンツに表示されない 2010/02/27
    レビュアー:おず

    親カテゴリ、子カテゴリにしたときに、子カテゴリ名が、メインコンテンツに反映されずに、親コンテンツがメインコンテンツ名が表示されていまいます。

    説明文はちゃんと、子カテゴリのものが表示されています。

    これはこういう仕様なのでしょうか。それとも私がどこかで間違っているのでしょうか。

  • ★★★★★ もう一息なんですが。。。 2010/03/02
    レビュアー:けん

    はじめまして。
    ただいま開店準備中ですが、「この機能さえあれば~」と探しておりました。

    だいぶ時間がたっているようですが、授業はまだ続いておりますでしょうか?

    EC CUBEは「2.4.2-comu」を使用しております。私の場合は、3ページ目まではうまくいきました。MySQLですが、「category_info」にきちんとデータが入り、更新できることも確認しました。最後のページの「LC_Page_Products_List_Ex.php」がうまくいっていないようで、システムエラーになってしまいます。ログを確認するとこんな感じです。

    == ログです。
    SELECT category_info FROM dtb_category WHERE category_id = ?

    DB Error: syntax error

    SELECT category_info FROM dtb_category WHERE category_id = ? [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1]
    == ここまでです。

    「LC_Page_Products_List_Ex.php」のprocess内が、お手本のページとだいぶ異なっているようで、おそらくこのためではないかと思います。「category_id = ?」の「?」に実際のIDが入ればいいと思うのですが、何を入れればいいのかアドバイスいただけませんか?

    お手数をおかけしますがよろしくお願いいたします。

    その他の環境は下記の通りです。
    よろしくお願いいたします。


    ===
    DBサーバ MySQL 5.1.42
    WEBサーバ Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
    PHP 5.2.12
    ==

  • ★★★★★ バラ(カテゴリ名)  2010/03/13
    レビュアー:miyabi

    こちらのページを参考にしてカテゴリ別に説明文を変えられるように設定したのですが

    のように、カテゴリ名のところが

    バラ(カテゴリ名)

    とでてきてしまいます。

    ここを、実際のカテゴリ名にするにはどうしたらいいでしょうか。

  • ★★★★★ 正常動作確認致しました。 2010/04/01
    レビュアー:EC きゅぶ男

    EC CUBE 2.4.3
    MySQL 5.0.77

    問題なく動作しております。

    エラーが起きている方はどこがが抜けている可能性が高いのでは?と思います。

    私も始めできずPostgreSQL版だからできないかもと助言を頂いたのですが、何度も見直し間違いを修正し使用できるようになりました。

  • 分かりません。教えていただけませんか。 2010/04/09
    レビュアー:ryu

    はじめまして

    今導入しようとしているんですが、即効躓いてます。

    【引用】
    ----------------------------------------データベースにカラム追加

    登録する情報が増えるわけですから、まずはデータベース側に受け皿(カラム)を用意する必要があります。カラムの追加はphpMyAdminやphpPgAdminを利用すると簡単です。

    dtb_categoryに以下のカラム2つを追加して下さい。いずれも必須ではないので、NOT NULLにチェックはしないで下さいね。


    1.カラム名: category_info データ型: text
    2.カラム名: info_flg データ型: smallint

    ----------------------------------------

    上記のカラム2つを追加しようと思っているんですが、【】内には何を入れればいいんでしょうか?

    新しいインデックスを作成する

    インデックス名【  】 インデックスの種類【  】※INDEX,UNIQUE,FULLTEXTから選択

    フィールド 【  】   サイズ【  】

    どなたかわかる方教えていただけませんか。
    よろしくお願い致します。

  • 新カテゴリ登録でシステムエラー 2010/04/12
    レビュアー:motoo

    上記の通り、やってみたら、成功しました。ありがとうございました。
    ただ、新カテゴリを登録しようとすると、システムエラーになってしまい、新カテゴリの登録がでいません。どうしてでしょう?どなたか、教えていただけませんか?

  • EC-CUBEバージョン 2.4.3 にアップグレードでエラー 2010/04/24
    レビュアー:2strawberrymilk

    カテゴリ毎に異なる説明文や画像を表示する設定(PostgreSQL版)を設定した後にアップグレードしたら、管理画面のカテゴリ表示がおかしくなり、原因を調べようと、CSVダウンロードをしようとした所、下記のエラーが出ました。

    Fatal error: Call to undefined method SC_Helper_CSV_Ex::lfGetCategoryCSV() in
    /data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Category_Ex.php on line 199
    随分調べましたが、どのように解決すればいいのか分かりません。もしよろしければ、解決方法をご教授頂けると助かります。よろしくお願い申し上げます。

  • 出来ました!有難うございました! 2010/05/01
    レビュアー:rie

    MySQLだったので、躊躇していましたが、
    きゅぶ男さんのコメントを見てチャレンジ!
    正常に動作しました!!有難うございました♪

  • ★★★ この機能試してみました 2010/05/14
    レビュアー:テスター

    EC-CUBE 2.4.3で実装試験やってみました。

    この記事だけではうまくいかないことがわかりました。

    私は初心者なので、この通りやったら”うまくいった!!”と安心していた矢先、デバッグがてら携帯サイト見てみたらエラーになります。


    Fatal error: Cannot instantiate non-existent class: lc_page_products_categorylist_ex in /home/test/public_html/yos/shop/mobile/products/category_list.php on line 35


    きっと携帯は「カラム」追加した関係でうまく動かなくなってしまうのでしょう。


    良い対処法教えていただけますでしょうか。

  • ★★★★★ csv出力も皆様上手くはきだせますか? 2010/06/26
    レビュアー:tora

    いつもありがたく記事を読ませて頂いております。
    EC CUBE 2.4.3
    MySQL
    で全て上手く動作しております。
    しかし、カテゴリのcsv出力を
    初めて本日したところ

    data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Category_Ex.php on line 199

    エラーが出てcsvがダウンロード
    出来ませんでした。
    ECCUBEの青本も何度も見直しましたが
    だめでした。
    なので、こちらで何か解決策を
    頂けないかと書き込ませて頂きました。

    何卒よろしくお願い致します。

  • csv出力がうまくできません。 2010/07/06
    レビュアー:ec-cube初めてカスタマイズ

    上記のtoraさんと全く同じ現象です。
    EC CUBE 2.4.3
    MySQL
    目的の動作は達成できたのですが、
    新規カテゴリが登録できなくなった事と、
    csv出力すると白い画面になってDLできない問題が発生しました。青本見てもだめでした。
    data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_Category_Ex.php
    このファイルを元に戻すと動作するので、
    このファイルの変更が原因かと思うのですが、
    アドバイス頂けると助かります。

この記事に対するトラックバック

この記事のトラックバック先URL