info

category : PHP
[CakePHP 2.x]checkboxでvalueを0に出来ない  @ PHP , CakePHP 2.x 2013年5月28日
checkboxでvalueを0に出来ない

この方法だと出来ない。
<?php
$options = array('hiddenField' => false,'value'=>'0');
echo $this->form->checkbox('samples.check1.', $options);
echo '1-A<br/>';
$options = array('hiddenField' => false,'value'=>'1');
echo $this->form->checkbox('samples.check1.', $options);
echo '1-B';
?>

出力結果
<input type="checkbox" name="data[samples][check1][]"  value="1" id="samplesCheck1"/>1-A<br/>
<input type="checkbox" name="data[samples][check1][]"  value="1" id="samplesCheck1"/>1-B


理由はFormHelper.phpのcheckboxメソッドに下記の処理があるため
if (empty($options['value'])) {
  $options['value'] = 1;
}


しかし、下記のやり方だと出来る。
ただし、<div>と<label>が勝手に付いてしまう。
<?php
$label=array('2-A','2-B','2-C','2-D');
echo $this->Form->input('check2', array('type' => 'select',
                                       'multiple' => 'checkbox',
                                       'options' => $label,
                                       'div'=>false,
                                       'label'=>false,
                                       'hiddenField'=>false,
                                       'before'=>'',
                                       'after'=>'',
                                       'between'=>'',
                                       'value' => array(0, 2)
                                       )
                         );
?>


出力結果
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="0" id="SamplesCheck20" /><label for="SamplesCheck20" class="selected">2-A</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="1" id="SamplesCheck21" /><label for="SamplesCheck21">2-B</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" checked="checked" value="2" id="SamplesCheck22" /><label for="SamplesCheck22" class="selected">2-C</label></div>
<div class="checkbox"><input type="checkbox" name="data[samples][check2][]" value="3" id="SamplesCheck23" /><label for="SamplesCheck23">2-D</label></div>


selectメソッドでも出来る。
<?php
$label=array('2-A','2-B','2-C','2-D');
echo $this->Form->select('check3',
                         $label,
                         array('multiple' => 'checkbox',
                               'div'=>false,
                               'label'=>false,
                               'hiddenField' => false,
                               'class'=>'testClass'
                         )
                         );
?>


sample
[CakePHP 2.x]form->radioのvalue値を指定する。  @ PHP , CakePHP 2.x 2013年4月19日
form->radioのvalue値を指定する。
<?= $this->Form->create('samples', array('type' => 'post', 'action' => 'sample1')); ?>
<ul class="info-list">
    <li>
        <label class="radio">
<?php
$options = array('value1'=>'ラベル1','value2'=>'ラベル2','value3'=>'ラベル3','value4'=>'ラベル4');
$attributes = array("legend" => false,
                    'label'=> false,
                    'separator'=>'</label></li><li class="radio"><label class="radio">',
                    'value'=>'value1'
                    );
echo $this->form->radio('radioGroup1', $options, $attributes);
?>
        </label>
    </li>
</ul>
<div class="textcenter margin-top1"><button type="submit" class="btn btn-wide3">submit</button></div>
<?= $this->form->end() ?>

サンプル
[PHP]preg_replaceで複数の文字列置換  @ PHP 2013年4月18日
preg_replaceで複数の文字列置換
<?php
$string='ABC DEF GHI JKL MNO ABC DEF GHI JKL';
$pattern=array("/ABC/","/DEF/","/MNO/");
$replace=array('あいう','えおか','ほげ');
$result=preg_replace($pattern, $replace, $string);
echo $result;
?>

結果
あいう えおか GHI JKL ほげ あいう えおか GHI JKL

サンプル
[PHP]wordpressでサイト構築Tips  @ PHP 2012年8月28日
wordpress3.0からマルチサイト機能がある。
これを使うとhttp://yourdomain/とhttp://yourdomain/A/とhttp://yourdomain/B/で
違うブログを表示できる。
・http://yourdomain/A/にアクセスしたときもhttp://yourdomain/B/にアクセスしたときも
 http://yourdomain/index.phpが呼ばれている。
・http://yourdomain/wordpress/にwordpressをインストールして、
 トップページをhttp://yourdomain/にする設定では
 マルチサイト機能が使えない。http://yourdomain/にインストールすれば出来る。

参考サイト
WordPressのマルチサイト機能で複数のブログを管理する
http://mage8.com/multiple-blogs-on-wordpress.html


マルチサイト機能使用時のindex.phpのサンプル
index.php
<?php
$req=$_SERVER['REQUEST_URI'];
$n=explode('?',$req);
$req=$n[0];

if($req=='/'){
	//普通にテンプレートを使って表示
	define('WP_USE_THEMES', true);
	require('./wp-blog-header.php');
}else if($req=='/A/'){
	define('WP_USE_THEMES', false);
	require('./wp-blog-header2.php');
	include('include_A.php');
}else if($req=='/B/'){
	define('WP_USE_THEMES', false);
	require('./wp-blog-header2.php');
	include('include_B.php');
}
?>


wp-blog-header2.php
<?php
if ( !isset($wp_did_header) ) {
	$wp_did_header = true;
	require_once( dirname(__FILE__) . '/wp-load.php' );
	wp();
}
?>


よく使いそうなメソッド
全ブログのIDを取得
$blogs=get_blog_list(0,'all');
foreach($blogs as $blog){
	echo $blog['blog_id'];
}

カテゴリー一覧を取得
$categories = get_categories();
foreach($categories as $cat){
	echo $cat->cat_ID;
}

指定したカテゴリIDから記事を取得
<ul>
<?php
	query_posts('showposts=3&cat='.$category->cat_ID);
	if (have_posts()) : while (have_posts()) : the_post();
?>
<li>
	<?php
		the_ID();
		echo '<br/>';
		the_title();
		echo '<br/>';
		the_content();
	?>
</li>
<?php endwhile; endif; ?>
</ul>

記事の内容を取得
$c=get_the_content();

参考サイト
関数リファレンス – WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9


管理画面で各ブログのIDを表示するプラグイン
View Blog ID in WordPress Multisite – WP Engineer
http://wpengineer.com/2188/view-blog-id-in-wordpress-multisite/
[PHP]listing.php  @ PHP 2012年3月23日

下図の赤線のhtmlへのリンクを書き出すphp。

Sample

 

index.php

<ul>
<?php

function getDirList($trgDir){
  $a = array();
  if ($dir = opendir($trgDir)) {
    while (($file = readdir($dir)) !== false) {
      if ($file != "." && $file != "..") {
        if(is_dir($trgDir.'/'.$file)){
          array_push($a, $file);
        }
      }
    }
  closedir($dir);
  return $a;
  }
}
function getFileList($dir,$ext){
    $res_dir = opendir($dir);
    $list=array();
    while( $file_name = readdir( $res_dir ) ){
        if($ext){
            $n=explode('.' , $file_name);
            if($n[1]==$ext)array_push($list,$file_name);
        }else{
            array_push($list,$file_name);
        }
    }
    closedir( $res_dir );
    return $list;
}
function sortByTimestamp($list){
    usort($list,'sortByTimestampCmp');
    return $list;
}
function sortByTimestampCmp($a,$b){
    $at=filemtime($a);
    $bt=filemtime($b);
    if($at==$bt)return 0;
    return ($at<$bt)?-1:1;
}
function echoList($list,$format){
    foreach($list as $dir){
        $n=getFileList($dir,"html");
        foreach($n as $f){
            $m=$dir . '/' . $f;
            if($format){
                echo preg_replace('/%@/',$m,$format);
            }else{
                echo $m;
            }
        }
    }
}

$dir_list=getDirList("./");
$dir_list=sortByTimestamp($dir_list);
$dir_list=array_reverse($dir_list);
echoList($dir_list,'<li><a href="%@" target="_self">%@</a></li>');

?>
</ul>