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 件のコメント:
コメントを投稿