top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_1060

symfony:で、それからどしたの? はい、一応創っております、ご報告 ・・・ 【symfonyで、企業サイトを創る】

 2009-08-05
【前回】
symfony:今までの作業を「よく」復習。プロジェクト>アプリケーション>モジュール と作成してゆく基本の流れを再確認・完全理解する・・・ 【symfonyで、企業サイトを創る
 から、随分時間が経ってしまった。
 それからどしたの? と聞かれそうですが、
 他の案件、プロジェクトと並行しながらも、粛々と
 制作、続けております。

 少しご紹介。


 前回は、一度頭を整理するために、
 「symfony での作業の基本ベース」をまとめ直したわけですが、
 私自身は、すぐに「実践」に入りたがるたちなので、
 ・チュートリアル 参考にしながらも
  結構、独自解釈でどんどん進めています。


  追記に ▼(長文ご容赦)


※この連載は、はじめて「symfony」に取り組んだmetaboyが、
 いきなり、企業サイトをこれで創ってしまお、という企画。
 参考にするチュートリアルは、
 ◆Practical symfony | Web PHP Framework に加え、
 ◆DAY4: リファクタリング : エクスギア Blog

FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎ symfonyで、企業サイトを創る:9回目
  ※それからどしたの?
************************************************


 前回までで基本的なサイト構成を用意し、
 復習・整理することで、「symfony の使い回し」も
 理解し始めた。


 ここで、そのまま「チュートリアル」通り進めばいいのだろうけど
 そうできないのが、困った私だ。
 勝手に独自解釈して先に進めている。


 前回までで、
 ・最初にアクセスする
  http://(ドメイン)/(プロジェクト名)/index.php/
  ・デフォルトとして用意した default というアプリを
   表示するように進めた。
   apps ディレクトリの構成は
   ディレクトリの構成
   こんな感じ。
   ※今まで、あんまり考えも無く、モジュール名も
    モザイクしてたけど、やめた。
   ※homeというモジュールは、最初用意してたのだけど
    default という名前にしておけば、
    初期 index.php でそれにアクセスするので、そちらに変更。


 この状態で、このプロジェクトの
 メインテンプレートである、
 (プロジェクト名)/apps/frontend/templates/layout.php
 は、どうなっているか ・・・ というと、(実は)


<?php require_once("*****.php");
require_once(COMPARTS_DIR."*****.php");
require_once(COMPARTS_DIR."*****.php");
require_once(COMPARTS_DIR."*****.php");
require_once(COMPARTS_DIR."*****.php");
echo $sf_content;
require_once(COMPARTS_DIR."*****.php");
require_once(COMPARTS_DIR."*****.php");
require_once(COMPARTS_DIR."*****.php");
?>
 ・・・こんなん、なっちゃってるんですねぇ。
   ※ ***** はお見せできないんですけど
    すべて、部品です。

    私は、作業に関しては徹底的な、部品利用の癖があり、
    同じことを他で書くのは大嫌い・・・という感じで、
    かたっぱしから、部品化、モジュール化してしまいます。


    まぁ、上記じゃなんのことかわからないと思いますが
    ・初期設定ファイル用意し
     ・変数・定数宣言し
    ・サイト内を
     ・header body footer などに分け、
    ・さらに細かく用途ごとに 部品化して
      include もしくは require しているわけです。


 で、問題なく表示されるんだけど、ひとつ理解したこと。


 echo $sf_content; で読み込まれる
 モジュールごとのテンプレート(最初に読み込まれるのは)
 ・(プロジェクト名)/apps/frontend/modules/default/templates/indexSuccess.php


 この中では(当たり前なんだろうけど)
 include もしくは require 使えないなぁ・・・


 この中で、
<?require_once(COMPARTS_DIR."*****.php");
?>
 ・・・なんてさらにやろうとしたけど
    だめだった。

 ・・・と思ったら、


 □symfony でも、ちゃんと「部品化のための機能
  ・パーシャル(partial)
  ・コンポーネント(component) てのがあるんですねぇ。
   > マニュアル「7.2.1. パーシャル


  【パーシャル


  ※ただし、格納されるべき場所は明確に決まっていて
   ・テンプレートと同じ場所
<?php include_partial('mypartial1') ?>
 ・・・などと利用。
    ※パーシャルは、頭に_を付けてphpファイルとして用意
     (この場合は、_mypartial1.php)
   ・他のモジュールのテンプレートと同じ場所
<?php include_partial('contact/mypartial2') ?>
 ・・・などと利用。
    ※contactモジュールのテンプレートディレクトリにある
     _mypartial2.php を利用。
   ・メインのテンプレートディレクトリ
<?php include_partial('global/mypartial3') ?>
 ・・・などと利用。
    ※frontend/templates/_mypartial3.php
    だ。

   ただし、include などとは違い、そのままでは
   テンプレート内で用意された変数などは使えない。
   パーシャル側で変数を利用したい場合は、


   ・テンプレート側で、
class mymoduleActions extends sfActions
{
public function executeIndex()
{
$this->total = 100;
}
}
 ・・・などと準備しておき、
    パーシャルを呼び出すために、
<?php include_partial('mypartial1', array('mytotal' => $total)) ?>
 ・・・と引数で渡す。

   なるほど、なるほど。


  【コンポーネント


    ※こちらは、もっと早いらしいし、動的変数など
     細かい利用方法ができるらいしい・・が、また後だ。

  まずは、この「パーシャル」を利用して、私の部品化癖を
  満足させるとしよう。


  【データアクセス


  ※これは理解できると、なかなか楽しかった。
   ・まず参考にしたのは、Doctrine でモジュール作成したとき
    自動的に生成される アクションクラス。
    ・(プロジェクト名)/apps/frontend/modules/whatsnew/actions/actions.class.php
  public function executeIndex(sfWebRequest $request)
{
$this->whatsnew_list = Doctrine::getTable('(テーブル名)')
->createQuery('a')
->execute();
}
 ・・・このままではだめだ。

   ・ネットで情報を物色。もちろんチュートリアルも参考にして。
    ・取得する項目(カラム)を決めたい
    ・取得表示件数を設定したい
    ・Where文を組み込みたい。


   で、結果は、


  public function get*****($max = 10)
{
$query = Doctrine::getTable('(テーブル名)')->createQuery('a');
$query->addWhere('a.id = ?', $value);
$query->addSelect('a.カラム1, a.カラム2, a.カラム3');
$query->limit(10);
$query->offset(0);
return $query->execute();
}
 ・・・こういう function を用意して、
  public function executeIndex(sfWebRequest $request)
{
$this->***** = $this->get*****();
}
 ・・・と呼ぶ。

   これを、トップページで、10件の最新情報 表示したかったので、
    ・(プロジェクト名)/apps/frontend/modules/default/actions/actions.class.php
     に用意する。


  【テンプレートでの利用


    先に説明した
    ・defaultのテンプレート(indexSuccess.php)には、
<?php include_partial('global/パーシャル名',array('変数名(配列)' => $変数名(配列))) ?>
 ・・・として、組み込むパーシャルに値を渡し
    部品化した先
    ・メインテンプレートディレクトリの
     _パーシャル名.php では、
<?php foreach ($変数名 as $arrayvalue): ?>
<li>
<h3><?php echo $arrayvalue['(カラム1)'] ?></h3>
</li>
<?php endforeach; ?>
 ・・・と利用できる。

   チュートリアルの進行無視だが、ここまでわかると、楽しい。
   後で必ず、チュートリアルで復習するけどね。

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/1060-064ba912
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。