バージョン選択

フォーラム

メニュー

オンライン状況

31 人のユーザが現在オンラインです。 (23 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 31
もっと...

サイト内検索

質問 > フロント機能 > 新着情報ブロックの複製

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2007/7/30 5:17
対応状況: −−−
新着情報ブロックの複製
現在EC CUBEのカスタマイズをしているのですが、どうしてもわからないことがあり、教えていただければ幸いです。

デフォルトでは、新着情報がブロックとして用意されていて、TOPに配置されていますが、トップではタイトルのみ一覧表示して、別途、新着一覧ページを作り、そこでタイトルと本文をダーっと表示する必要があります。(レイアウトも違います)

方法として、
1:管理画面上から/user_data/以下に新着一覧用のページを作り、そのページから新着情報ブロックの内容を複製してレイアウトを整えたものを呼び出す。

2:管理画面上から/user_data/以下に新着一覧用のページを作り、それ自体に新着情報ブロックと同等の機能を移植して実装する。

とかかなぁと思い、試してるのですが、共にうまく行かない状況です。奥の手(?)として、新着情報ブロックのテンプレート内にif文書いて、呼び出す親テンプレートによって、表示を切り替えようとしましたが、ブロック内では、phpで定義した変数が使えないようで撃沈しました。。

こういう場合、どういった実装が考えられますでしょうか?
Smartyあまり触ったことなく、2をやろうとしたとき、そもそもDBから値引っ張ってくるような処理本体がどこにはいっているのかがわかってないという状況だったりします。。
ゲスト
投稿日時: 2007/7/30 5:56
対応状況: −−−
Re: 新着情報ブロックの複製
objPageに変数を登録してやれば、Smarty内でPHPで定義した変数も
使えますがそれはされているのでしょうか?
ゲスト
投稿日時: 2007/7/30 21:07
対応状況: −−−
Re: 新着情報ブロックの複製
すみません、説明が足りてなくて。
現状PHP上で、tpl_page_categoryを宣言して、
main.tpl上では、tpl_page_categoryを使ってIF文などの処理はできてます。
更にその下のページごとのテンプレートを経由して、ブロックのテンプレート(news.tpl)内では、tpl_page_categoryを使った振り分けの処理ができていない状況です。
テンプレートから子テンプレート呼び出して、その中で親の変数つかうには、引き渡すような処理が必要かなと思い、マニュアル参考に
<!--{include file='top.tpl' tpl_page_category=$tpl_page_category}
なんて、ことを試してみましたが、うまく行ってません。。
(根本的に勘違いしているかもしれませんが。。)

また、そもそも、main.tplの上には、frame.tplがあるはずで、そこでもmain.tplになにかひきまわしてるのかなぁっと思っていたのですが、それらしき記述もみつからず。。

という状況です。
drednote
投稿日時: 2007/7/30 21:38
対応状況: −−−
常連
登録日: 2007/7/30
居住地: 滋賀
投稿: 41
Re: 新着情報ブロックの複製
blocはblocで独自に処理用PHPがあったりしますので(但しシステムに最初から
登録されているblocのみ。ユーザー作成blocは管理画面上だけでは
テンプレートしか作成出来ません)、データベースアクセスもそっちに
入っていたりします。
新着情報の処理は

html/frontparts/bloc/news.php

内の

lfGetNews

で取得しており、ここで取得したデータをarrNewsとしてobjSubPageに
登録する事で、blocテンプレート内で使用しています。
ですので、新着ページをメインコンテンツエリアに別に作るのであれば、
ページ詳細管理でテンプレートを作った時に一緒に作られたPHP内に
同様の処理を記述する事で、新しく作ったページで新着情報を扱う事が出来るようになります。
ゲスト
投稿日時: 2007/8/5 23:23
対応状況: −−−
Re: 新着情報ブロックの複製
返答おそくなりましてすみません。

結果として、news.phpをコピーして、news2.phpというモジュールを作って、別ブロックを作り、DB直接登録しました(この辺管理画面でできると便利なんですが)
で、それを、自分で作ったページから呼び出すような形ですね。

自分のやり方が悪いと思いますが、news.phpの機能を上手く移すことができず、上記のようにな形になってしまいましたがdrednoteさんの意見がとても参考になりました、ありがとうございました。
これまでDB触らないようにカスタマイズしてましたが、今回覗いてみて初めて判ることも沢山ありますね。
drednote
投稿日時: 2007/8/6 8:43
対応状況: −−−
常連
登録日: 2007/7/30
居住地: 滋賀
投稿: 41
Re: 新着情報ブロックの複製
ページ詳細設定画面で新規ページを作るのではなく、ブロック編集画面で
新規ブロックを作って使った場合、デフォルトではこの新規ブロックで
使われるPHPは、このブロックを呼び出しているメインコンテンツ側の
PHPとなる点に注意して下さい。
つまり、新規ブロックとして作成し、これをユーザー作成のオリジナルページでのみ
表示させるのであれば、このユーザー作成のオリジナルページのPHPに
データベース処理をさせる事で、作成したブロックにデータベース内容を
反映させる事が出来ますが、そうではなく複数ページから呼び出す等の
場合には独自のPHPを持ちたい事もあるかと思います。
こういう場合にはデータベースを直接編集しなければなりません。
この場合の該当テーブルはdtb_blocで、これのphp_pathがブロックに使用する
PHPへの、htmlディレクトリからのパスとなります。
ryo
投稿日時: 2007/8/7 13:57
対応状況: −−−
一人前
登録日: 2007/7/26
居住地: 関西
投稿: 86
Re: 新着情報ブロックの複製
僕も同様の事で悩んでいたことがあります。

TOPでは新着5件のみ表示して、一覧用のページでは全て表示させるというものです。
そこでブロックを複製できないかと色々悩んだのですが、ブロックを複製するのではなく、ページとして新着情報を表示するページを1枚作ることで対応できました。
詳細は以下の方法でしました。

1.管理画面のデザイン管理から「新規ページ作成」をクリックして、名称(例:テスト)とファイル名(例:testpage)を入力し、メイン表示用のテキストエリアに新着ブロック内のソースを全てコピーします。

2.FTPで「html/user_data/」内にある「testpage.php」をDLし、テキストエディタで開きます。

3.開いたファイルを以下のように修正します。
引用:

<?php
require_once("/html/require.php");

class LC_Page {
function LC_Page() {
/** 必ず変更する **/
$this->tpl_css = URL_DIR.'css/layout/contact/index.css';
$this->arrNews = array(); // 追加
}
}

$objPage = new LC_Page();
$objView = new SC_SiteView();

// レイアウトデザインを取得
$objPage = sfGetPageLayout($objPage);
//新着情報取得
$objPage->arrNews = lfGetNews(); //追加



// 画面の表示
$objView->assignobj($objPage);
$objView->display(SITE_FRAME);
//-----------------------------------------------------------
// 以下、追加
function lfGetNews(){
$conn = new SC_DBConn();
$sql = "SELECT *, cast(substring(news_date,1,10) as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC";
$list_data = $conn->getAll($sql);
return $list_data;
}

?>


4.修正したファイルをULして上書きします。そのページにアクセスすると、デフォルトの(1でコピーしたソースの)通り表示されています。

注)--------------------------------------------------
ページ詳細設定でメイン領域のレイアウトを変更してしまうと、3の修正した内容が全て初期化されてしまいます。注意してください。
レイアウトを修正する場合は「html/user_data/templates/」内にあるtestpage.tplをDLしてテキストエディタで修正するのが手間がないと思います。
yohei_t
投稿日時: 2011/4/23 12:22
対応状況: −−−
新米
登録日: 2011/4/23
居住地:
投稿: 1
Re: 新着情報ブロックの複製
$smarty.server.PHP_SELF|escapeをif文で切り替えると出来ますよ。



スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,350名です
総投稿数は102,428件です

投稿数ランキング

1
seasoft
7333
2
468
3107
3
AMUAMU
2712
4
nanasess
2187
5
umebius
2034
6
yuh
1614
7
red
1454
8
h_tanaka
1125
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.