Re: view.phpでredeclareが

2012年10月22日 at 20:02

タグを出力する関数を置きたいと思っています。
見た目を変えるには、view.php のみを触ればいいというのが、基本ですよね。
なので、見た目を決めるタグ出力をする関数をview.phpに作ってみたんです。

そういう場合はどんな方法がいいんでしょうかね。

Re: view.phpでredeclareが

2012年10月22日 at 21:54
コレが参考になるかもです。

http://www.concrete5.org/community/forums/customizing_c5/i-want-one-character-function/
 

Re: view.phpでredeclareが

2012年10月23日 at 6:04
英語なのできちんとはわかりませんが、function本体をview.phpに入れて、templateで変更できるようにできないかなと思っています。
 

Re: view.phpでredeclareが

2012年10月23日 at 10:36
viewに関数は定義しません。それはconcrete5のルールから外れます。

通常であればcontrollerに定義します。

ソレ以外だとhelperとかが使われますが、view内で単純な関数として使いたい場合は、リンクに書いてある様に
config/site_post.php
に関数を定義してください。グローバルな関数として利用できます。
 

Re: view.phpでredeclareが

2012年10月23日 at 15:01
もう一度なにがしたいか、書きます。

複雑な処理をしながら表示するブロックがある。
その複雑な処理の部分は、コードが多いので、controller.phpに記述し、処理の結果の表示、つまりタグ出力部分のみをview.phpに書きたい。view.phpに置きたい理由は、テンプレート切り替えで表示方法を変更できるようにしたいから。

そういうことからcontroller.phpからview.phpの表示関数を呼び出したいと思いました。
しかしながら、view.phpに関数は置けない。

だとすると、いまcontroller.phpに置いてある長ーい処理をごっそり、view.phpに持って来ないといけないのでしょうかね。
 

Re: view.phpでredeclareが

2012年10月23日 at 19:49
controller部ではview.phpで分岐に必要な変数や、viewで変更させたい値のみを作成し、
html自体はviewで作成するのが基本だと思います。

関数をviewにおくということは使いまわすということでしょうか?
だとしたら、view.phpを同じフォルダに別ファイルで作成して
$this->inc()で対応できないでしょうか?
 

Re: view.phpでredeclareが

2012年10月23日 at 21:30
具体的にやりたいことを書きますね。

aclissさんはフォームのview.phpをご覧になったことがあると思います。
フォームのview.phpの最後に、controller.phpのfunctionを呼び出して、controller.php内でHTMLタグを出力していることをご存知と思います。
つまり、原則に反して、HTMLのタグをview.phpでなく、controller.phpで出しています。

実は海外からの要望で、フォーム項目の出力にテーブルで縦に並べるのではなくて、divのfloatで横に並べたいとの要望がありました。

これはいわゆる出力タグだけの問題なので、テンプレートで対応できないかと思っています。
しかしながら上記の通り、HTMLのタグをcontroller.phpで出力しているので、テンプレートで変更できません。そこで、なんとかHTMLの出力をcontroller.phpからview.phpに持ってきたいと思っています。
 

Re: Re: view.phpでredeclareが

2012年10月24日 at 8:12
formブロッックなんですね。すみません、最近 拡張フォームのソース見てないですが、

loadsurvey() と loadInput() のタグを出力しているメソッド viewに移動してそれ以外のメソッドをcontroller.php の view()から、読み込んで$this->set()で渡す。単純にいうとそういう感じだと思うのですが、現実は複雑そうですね。
 

Re: view.phpでredeclareが

2012年10月24日 at 8:58
いい方法はなさそうですね。

一旦出力する内容だけを一旦全部配列にためてから、view.phpで取り出して表示するという方法でやるしかなさそうですね。

そうすると一時的にメモリーを多量に消費すると思うので気になるんですがしかたないですかね。
 

Re: view.phpでredeclareが

2012年10月24日 at 9:15
loadsurveyあたりを変えてcontrollerでHTML(テーブル)を出さずに、view側で出す様にするのが王道だと思います。

その他のやり方としては、viewで出力を一旦文字列かxmlとして変数に格納して、テーブルタグをdivタグに書き換えるやり方になると思います。

追記:
loadsurvey()をコピペして、loadsurveydiv()とかを作って、テーブルタグじゃなくてdivタグで出す様にして、view側でviewの内容に合わせてそれぞれを呼び分けた方が楽かもしれませんね。
 

Re: view.phpでredeclareが

2012年10月24日 at 9:58
なるほど、そういう方法になるんですね。

しかしXMLですかあ。
手持ちにPHPでのXML処理のことが書いてある本がないので本屋さんでしらべてみます。

XMLの代わりに一時的にデータベースに置くのはよろしくないですかね。
 

Re: view.phpでredeclareが

2012年10月24日 at 10:03
xmlは忘れてもらっていいと思います。
loadsurvey変えるのが一番いいと思いますよ