以前にも質問させて頂きました、kenppxと申します。
今回はsimplenewsモジュールについてお聞きしたいのですが、宜しくお願いします。
もしかすると、panels及びpage managerに関する質問になるのかも知れません。
構築環境は以下の通りです。
Drupal 7
Simplenews 7.x-1.0-alpha1
Panels 7.x-3.0-alpha3
simplenewsにより生成される、購読用フォームページ(newsletter/subscriptions)に
panelsによりコンテンツを加える方法を教えて頂けたらと思います。今までに以下の事を試してみました。
1.page manager(ページ)でパスが/node/%nodeのページにコンテンツを加えてみたのですが、
newsletter/subscriptionsにはコンテンツが表示されませんでした。
2.次にpage managerでAdd custom pageからnewsletter/subscriptionsに
カスタムページを作ろうとしたのですが、下記の様に『そのパスはもう使われてるよ!!』と怒られてしまいました。
That path is already in use. This system cannot override existing paths.
3.同じくpage managerで/subscription/*に対して同様の事をしてみましたが、コンテンツは表示されませんでした。
4.逆にこのページをpanels内のコンテンツとして表示出来ないかを試してみたのですが、コンテンツ選択画面で
選択項目が見つからず断念。Existing nodeとして探してみましたが見つからず。(そもそもこのページはノード?)
以上を試してみたのですが、ダメでした。どなたかアドバイスを頂けたらと思います。
何卒宜しくお願いします。
Comments
PanelsはDrupalのノードやリストが並ぶConte
PanelsはDrupalのノードやリストが並ぶContent部分、Themeの.infoファイルにある
regions[content] = Content
言い換えると、node.tpl.phpで操作される部分
をURLを持ったページとしてそっくり置き換えるという趣旨のモジュールなので、
そのままではSimplenewsモジュールが作ったURLを伴った”newsletter/subscriptions”ページと同居はできないと思います。
しかし、発想を逆にしてPanelsで新規ページを作った中に”newsletter/subscriptions”の中身をPaneの中に呼び出したり、
Simplenewsが吐き出すブロックを配置することは可能です。
簡単なのはBlock管理ページにSimplenewsのSubscriptions Blockがあるはずなのでそれを呼び出せるはずです。
kenppxさんのやりたいことと合っていればよいのですが。
ありがとうございます。
qchan様とても丁寧なご説明ありがとうございます。
やはりそうですか…。色々試したのですがどうしてもダメでした。
simplenewsが吐き出す購読用のブロックを呼び出すことは
できるのですが、"newsletter/subscriptions"の中身そのもの
を呼び出すことがどうしてもできません。
もしよろしければ具体的な方法を教えて頂ければ幸いです。
これがnodeであれば簡単に呼び出せるとは思うのですが、
モジュール自体が吐き出すページとなると、どの様にpane内に
呼び出せば良いのかがわかりません。
"newsletter/subscriptions"内のフ
"newsletter/subscriptions"内のフォームと
購読用のブロックの内容は同じように思えますが、ブロック呼び出しではだめな理由はなにかあったりしますか?
問題点
qchan様
問題点としましては、購読解除用のボタンがブロックには無い事です。
一方、"newsletter/subscriptions"内には登録解除ボタンがあります。
出来れば、登録解除ボタンのある"newsletter/subscriptions"の中身を
表示できたらと考えております。
なるほど理解しました。 moduleがから吐き出されるペー
なるほど理解しました。
moduleがから吐き出されるページというのは、Nodeという統一されたフォーマットには縛られないコンテンツです。
moduleには、そのURLへアクセスがあったときにどんなプログラムを動かすかという指示が書けます。
まったく自由に動かせるのでDrupalがCMSというよりWebアプリケーションフレームワークとして使える強さもここにあります。
いかようにも書けてしまいますから、決まった取り出し手順はないんです。
その都度、.module ファイルに書かれたプログラムを読んで対応することになります。
kenppxさんがモジュールの吐き出した内容をPanelsに取り出したい場合は、
hook_menu()やFormAPIを調べて実装する必要がありますね。
もっと簡単な方法があるとうれしいので、どなたかのコメントを待ちたいと思います。
今回ですと
のような $items[] の部分にその大枠が書いてあります。
'page callback'の項目を見ると、Formを吐き出しているのが見て取れるので
PaneでPHPフィルターを有効にしてから、以下のように書けば出てくるかもしれません。
そういう事でしたか…。
qchan様
ご説明本当にありがとうございます。上記のコード試してみます。
また、これからhookやFormAPIについて勉強してみます。
ちなみに、phpフィルターを有効にしてpane内やブロック内にphpを記述という手法は
Drupalの世界では日常的に使用される方法ですか?
初心者の私としては、ただ便利な機能だなぁーとだけ思ってしまうのですが…。
何か注意点等ありましたら、教えていただけると幸いです。
質問ばかりで申し訳ありません。
PHPフィルターはDrupalコアの機能なので特殊な使い方
PHPフィルターはDrupalコアの機能なので特殊な使い方ではないと思います。
Body,Block, CCK field,Rules,Viewsなどでも使えます。
例えばBlock に書くSnipetリスト
PHP block snippets | drupal.org
しかし、非常に便利な反面、使い方には気をつけたほうがよいとあちこちで書かれています。
あと、
などマイナス面もありますから、慎重に使ったほうがよいでしょうね。(自戒を込めて)
あと、書き間違うとWSODになります。最悪、復旧するのに該
あと、書き間違うとWSODになります。最悪、復旧するのに該当のコードをdbから直接削除することになったりもします。サイトが落ちた場合の損害を考慮して、僕の今のクライアントには使用禁止にしてもらっています。
WSOD
dokumori様
WSODは恐怖ですね。復旧の仕方は知っていないとですね。
勉強しようと思います。
なるほどー、使う時には十分に注意が必要ですね。 心しておき
なるほどー、使う時には十分に注意が必要ですね。
心しておきます。DBを操作して復旧する方法も勉強する必要がありますね。
調べてみます。