2012年6月4日月曜日

2012年06月01日 講義074日目

2012年06月01日
講義074日目
------------------------------1H------------------------------
★symfony
●pager
・.pagerをstyle.cssに追加
.pager {
    text-align: center;
}

.pager ul {
    text-align: center;
    height: 25px;
}

.pager li {
    margin: 0 6px;
    display: inline;
    zoom: 7;
}

・pagerの拡張
ヘルパーを
/lib/helper/MyPagerQueryHelper.php
配置

/fornt /default actions.class.php
$this->search_arr = array()
に追加
        $this->search_arr = array(
        //pager機能に持たせるクエリパラメータ

        //実装するページのモジュールとアクション名
        "module" => "default",
        "action" => "index" ,
        //昇順降順情報
        "order" => $this->getRequestParameter("order_by"),

/front /default indexSuccess.php
<?php include_partial("global/pager",
            array("pager" => $pager,
                  "query" => $sf_context->getModuleName().
                             "/".
                             $sf_context->getActionName().
                             "?"
                 )
)?>

<?php include_partial("global/pager",
            array("pager" => $pager,
                  "query" => parameter_to_query(
                                $sf_context->getModuleName(),
                                $sf_context->getActionName(),
                                $search_arr)
                 )
------------------------------2H------------------------------
★symfony
●昇順降順機能の実装
・とりあえずリンクを作る
front /default actions.class.php

<?php  if($search_arr["order_by"] != "asc"):?>
<a href= "./?order_by=asc">created_atをascで並び替える</a>
<?php else:?>
<a href= "./order_by=desc">created_atをdescで並び替える</a>
<?php endif;?>


・クリックしたら出力が逆になる
→MODELの修正
/model CommentPeer.php

        //pagerの昇順降順入れ替えのための条件分岐
        if($search_arr["order_by"] != "asc"){
            $c->addDescendingOrderByColumn(self::CREATED_AT);
        }else{
            $c->addAscendingOrderByColumn(self::CREATED_AT);
        }

・他のパラメータも持ったままにする
→テンプレートの修正


class CommentPeer extends BaseCommentPeer
{
    static function getBbsArticles($search_arr = array(), $page = 1, $perpage = 10){
        $c = new Criteria;

        //$search_arrが存在する場合、検索条件によりadd
        foreach($search_arr as $k =>$v){
            switch($k){
                case "word":
                    if($v != ""){
                        $c->add(self::CONTENT, "%{$v}%", Criteria::LIKE);
                    }
                    break;
                case "category":
                    if($v != ""){
                        $c->add(self::CATEGORY_ID, $v);
                    }
                    break;
                case "date_start":
                case "date_end":
                    if(isset($date_flg)){
                        break;
                    }
                    //一つのカラムに複数の条件をつける際にgetNewCriterion()を使う
                    if($search_arr["date_start"] && $search_arr["date_end"]){
                        $c1 = $c->getNewCriterion(self::CREATED_AT,$search_arr["date_start"], Criteria::GREATER_EQUAL);
                        $c2 = $c->getNewCriterion(self::CREATED_AT,$search_arr["date_end"], Criteria::LESS_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($search_arr["date_start"]){
                        $c->add(self::CREATED_AT,$search_arr["date_start"],Criteria::GREATER_THAN);
                    }elseif($search_arr["date_end"]){
                        $c->add(self::CREATED_AT,$search_arr["date_end"],Criteria::LESS_THAN);
                    }
                    $date_flg = 1;
                    break;
                case "photo":
                    if($v == "y"){
                        $c1 = $c->getNewCriterion(self::PHOTO, "", Criteria::NOT_EQUAL);
                        $c2 = $c->getNewCriterion(self::PHOTO, NULL, Criteria::NOT_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($v == "n"){
                        $c1 = $c->getNewCriterion(self::PHOTO, "");
                        $c2 = $c->getNewCriterion(self::PHOTO, NULL);
                        $c1->addOr($c2);
                        $c->add($c1);
                    }
                    break;
                case "url":
                    if($v == "y"){
                        $c1 = $c->getNewCriterion(self::URL, "", Criteria::NOT_EQUAL);
                        $c2 = $c->getNewCriterion(self::URL, NULL, Criteria::NOT_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($v == "n"){
                        $c1 = $c->getNewCriterion(self::URL,"");
                        $c2 = $c->getNewCriterion(self::URL,NULL);
                        $c1->addOr($c2);
                        $c->add($c1);
                    }
                    break;
            }
        }

        //自身のクラスを参照する場合のみ、「Peer」ではなく「salf」で参照する

        //pagerの昇順降順入れ替えのための条件分岐
        if($search_arr["order_by"] != "asc"){
            $c->addDescendingOrderByColumn(self::CREATED_AT);
        }else{
            $c->addAscendingOrderByColumn(self::CREATED_AT);
        }


        //ページ数とページ位置により、表示する内容を操作するクラス
        $pager = new sfPropelPager("Comment",$perpage);
        $pager->setCriteria($c);
        $pager->setPage($page);
        $pager->init();
        return $pager;

        //↓sfPageFlowを使わない場合
        //return self::doSelect($c);
    }

↓関数を分割してわかりやすく
    static function getBbsArticles($search_arr = array(), $page = 1, $perpage = 10){
        $c = new Criteria;

        //$search_arrが存在する場合、検索条件によりadd
        foreach($search_arr as $k =>$v){
            switch($k){
                case "word":
                    if($v != ""){
                        $c->add(self::CONTENT, "%{$v}%", Criteria::LIKE);
                    }
                    break;
                case "category":
                    if($v != ""){
                        $c->add(self::CATEGORY_ID, $v);
                    }
                    break;
                case "date_start":
                case "date_end":
                    if(isset($date_flg)){
                        break;
                    }
                    //一つのカラムに複数の条件をつける際にgetNewCriterion()を使う
                    if($search_arr["date_start"] && $search_arr["date_end"]){
                        $c1 = $c->getNewCriterion(self::CREATED_AT,$search_arr["date_start"], Criteria::GREATER_EQUAL);
                        $c2 = $c->getNewCriterion(self::CREATED_AT,$search_arr["date_end"], Criteria::LESS_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($search_arr["date_start"]){
                        $c->add(self::CREATED_AT,$search_arr["date_start"],Criteria::GREATER_THAN);
                    }elseif($search_arr["date_end"]){
                        $c->add(self::CREATED_AT,$search_arr["date_end"],Criteria::LESS_THAN);
                    }
                    $date_flg = 1;
                    break;
                case "photo":
                    if($v == "y"){
                        $c1 = $c->getNewCriterion(self::PHOTO, "", Criteria::NOT_EQUAL);
                        $c2 = $c->getNewCriterion(self::PHOTO, NULL, Criteria::NOT_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($v == "n"){
                        $c1 = $c->getNewCriterion(self::PHOTO, "");
                        $c2 = $c->getNewCriterion(self::PHOTO, NULL);
                        $c1->addOr($c2);
                        $c->add($c1);
                    }
                    break;
                case "url":
                    if($v == "y"){
                        $c1 = $c->getNewCriterion(self::URL, "", Criteria::NOT_EQUAL);
                        $c2 = $c->getNewCriterion(self::URL, NULL, Criteria::NOT_EQUAL);
                        $c1->addAnd($c2);
                        $c->add($c1);
                    }elseif($v == "n"){
                        $c1 = $c->getNewCriterion(self::URL,"");
                        $c2 = $c->getNewCriterion(self::URL,NULL);
                        $c1->addOr($c2);
                        $c->add($c1);
                    }
                    break;
            }
        }

        //昇順降順を指定
        $c = self::setOrderByParam($search_arr["order_by"], $c);

        //getPropelPagerObject()のオブジェクトを取得
        $rtn = self::getPropelPagerObject($c, $perpage, $page);
        return $rtn;

        //↓sfPageFlowを使わない場合
        //return self::doSelect($c);
    }

    protected static function setOrderByParam($param, $c){
                //自身のクラスを参照する場合のみ、「Peer」ではなく「salf」で参照する

        //pagerの昇順降順入れ替えのための条件分岐
        if($param != "asc"){
            $c->addDescendingOrderByColumn(self::CREATED_AT);
        }else{
            $c->addAscendingOrderByColumn(self::CREATED_AT);
        }
        return $c;
    }

    protected static function getPropelPagerObject($c, $perpage, $page){
        //ページ数とページ位置により、表示する内容を操作するクラス
        $pager = new sfPropelPager("Comment",$perpage);
        $pager->setCriteria($c);
        $pager->setPage($page);
        $pager->init();
        return $pager;
    }
------------------------------3H------------------------------
★symfony
●pager
・パラメータを取得できるようにする

actions.class.php

$this->search_arr = array(

"order_by" => $this->getRequestParameter("order_by", "desc"),
を追加

        //パラメータの値を書き換える処理
        if($this->search_arr["order_by"] == "desc"){
            $this->search_arr["order_by"] = "asc";
        }else{
            $this->search_arr["order_by"] = "desc";
        }
indexSuccess.php

<?php //pagerでリンクを作るときのパラメータ取得部分を変数に入れですっきりさせた
$query = parameter_to_query($sf_context->getModuleName(), $sf_context->getActionName(), $search_arr)?>

<?php include_partial("global/pager", array("pager" => $pager, "query" => $query))?>
<?php //ifでascかdescを各々出力させていた部分をパラメータの値を省略?>
<a href= "/<?php echo $query?>">created_atを<?php echo $search_arr["order_by"]?>で並び替える</a>
------------------------------4H------------------------------
★symfony
●symfony freezeとsymfony unfreezeでsandboxにする
・symfony freeze
symfonyのライブラリを別の領域にコピーして独立させることができるコマンド
バージョン管理などで使う
☆使うときに/web/sfは消しておく(あるとコマンドが効かない)
・symfony unfreeze
symfonyのバージョンアップなどを反映させるためにfreezeを解除させるコマンド
☆注意点!
・sandbox化した後の権限を正常にする
symfony fix-parms

●開発用symfony環境サーバ→本番用symfony環境サーバ移行の注意点
バージョンに注意
configのサーバのパスなどに注意

開発環境
複数の場所で開発したりする

●開発フロー
テスト環境
データベース、アプリケーションのバージョンを本番環境と同様にして動かす
細かい詰め作業をする
うまくいかなかったら開発環境に戻る

本番環境
実際に稼動させる

●バージョン管理ソフト
Subversionなどのソフトで管理
------------------------------5H------------------------------
★最終課題
centOSかxammpで開発しておき、後でリリース
●サーバ選び
・CGIが使えるかどうか(自分の開発言語、たとえばPHPが使えるかどうか、バージョン情報も確認)
・DBが使えるかどうか
・MYSQLが使えるかどうか
別に他のデータベースを使うんでもいい
・取れるサブドメイン、メールアカウントの数
SEO的に共有だと同サーバの他のサイトにも影響しあう
・SSH接続
無いとputtyとかでつなげない
●制作の条件
なんでもいい
外部に公開するつもりで作る
------------------------------6H------------------------------
★最終課題開発
●.htaccess
/local/lib/php/htdocs/sf.testにリダイレクトする
はずだったが、うまくいかないので
/wwwに直接プロジェクトを作成
・[nishi@localhost web]$ vi .htaccess
Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  #RewriteBase /

  # we skip all files with .something
  # comment the following 3 lines to allow periods in routes
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule .* - [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(backend/.*)$ backend/backend.php [QSA,L]
  RewriteRule ^(.*)$ ./sftest/web/index.php [QSA,L]
</IfModule>

# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"

・↑だとうまくいかないので次回に
-----------------------------memo------------------------------

0 件のコメント:

コメントを投稿