Beispiel #1
0
/**
 * link_to_option_selectable()
 * 動的な条件判断をclosureで指定して、条件の結果に基づいてオプションを設定するlink_to
 *
 * @param  string  $text             リンクを設定する文字列
 * @param  string  $path             リンク先ページのパス
 * @param  closure $compare_function 条件判断関数(true/falseを返す)
 * @param  mixed   $default_options  条件に関わらず設定するオプション
 * @param  mixed   $true_options     条件が成立した場合に設定するオプション
 * @param  mixed   $false_options    条件が成立しない場合に設定するオプション
 * @return string  リンクタグ
 */
function link_to_option_selectable($text, $path, $compare_function = null, $default_options = null, $true_options = null, $false_options = null)
{
    // オプションが何も指定されていない場合、自動でtitle属性を設定する
    if (!is_array($default_options) || !count($default_options)) {
        $default_options = array('title' => $text);
    }
    $result = 0;
    if (is_callable($compare_function)) {
        if (call_user_func_array($compare_function, array($path))) {
            // 条件が成立
            $result = 1;
        }
    } else {
        // 条件判断関数がない
        $result = 2;
    }
    switch ($result) {
        // 条件が成立しない場合
        case 0:
            if (is_array($false_options)) {
                $default_options = array_merge($default_options, $false_options);
            }
            break;
            // 条件が成立した場合
        // 条件が成立した場合
        case 1:
            if (is_array($true_options)) {
                $default_options = array_merge($default_options, $true_options);
            }
            break;
        default:
            // 何もしない
    }
    return link_to_page($text, $path, $default_options);
}
              <div>ブログ</div>
              <div class="main_title_en">Blogs Information</div>
            </h2>
            <ul class="list_main">
            <?php 
foreach ($blog_pages as $page) {
    ?>
              <li><img src="<?php 
    echo public_path('images/list_arrow_orange.png');
    ?>
" alt="" />
              <?php 
    echo $page->getFormattedFirstCommitted();
    ?>
              <?php 
    echo link_to_page($page->getTitle(), $page->getPath());
    ?>
</li>
            <?php 
}
?>
            </ul>
          </div>
          <!-- end .article -->


        </div>
        <!-- end #main_content -->


        <div id="side_2" class="side">
$t->diag('url_for_page()');
$t->is(url_for_page('/test'), '/module/action/test', '第1階層ページ名');
$t->is(url_for_page('test'), '/module/action/test', '第1階層、先頭のスラッシュは自動付与');
$t->is(url_for_page(''), '/module/action/', '空の場合はトップURL(スラッシュ付)');
$t->is(url_for_page('/'), '/module/action/', 'ルート');
$t->is(url_for_page('/test/'), '/module/action/test/', '第1階層 末尾スラッシュ');
$t->is(url_for_page('/test/foo'), '/module/action/test/foo', '第2階層ページ名');
$t->is(url_for_page('/test/foo/'), '/module/action/test/foo/', '第2階層スラッシュ付');
$t->is(url_for_page('/test//foo'), '/module/action/test/foo', '途中の連続スラッシュは自動削除');
// link_to_page()
$t->diag('link_to_page() URL生成部分はurl_for_page()に依存');
$t->is(link_to_page('foo', '/test'), '<a href="/module/action/test">foo</a>', '第1階層ページ名');
$t->is(link_to_page('foo', '/test/foo'), '<a href="/module/action/test/foo">foo</a>', '第2階層ページ名');
$t->is(link_to_page('foo', '/test/foo/'), '<a href="/module/action/test/foo/">foo</a>', '第2階層スラッシュ付');
$t->is(link_to_page('foo', '/test//foo'), '<a href="/module/action/test/foo">foo</a>', '途中の連続スラッシュは自動削除');
$t->is(link_to_page('foo', '/test', array('class' => 'bar')), '<a class="bar" href="/module/action/test">foo</a>', 'link_toのオプションはそのまま有効');
// link_to_option_selectable()
$t->diag('link_to_option_selectable() リンクタグ生成はlink_to_page()に依存');
$test_function_true = function ($param) {
    return true;
};
$test_function_false = function ($param) {
    return false;
};
$t->is(link_to_option_selectable('foo', '/test', $test_function_true, array(), array('opt' => '1'), array('opt' => '0')), '<a title="foo" opt="1" href="/module/action/test">foo</a>', '条件true時は、true時オプションが適用される');
$t->is(link_to_option_selectable('foo', '/test', $test_function_false, array(), array('opt' => '1'), array('opt' => '0')), '<a title="foo" opt="0" href="/module/action/test">foo</a>', '条件false時は、false時オプションが適用される');
$t->is(link_to_option_selectable('foo', '/test', $test_function_true, array('defopt' => 'default'), array('opt' => '1'), array('opt' => '0')), '<a defopt="default" opt="1" href="/module/action/test">foo</a>', 'デフォルトオプションとマージされる');
$t->is(link_to_option_selectable('foo', '/test', $test_function_true, array('opt' => 'default'), array('opt' => '1'), array('opt' => '0')), '<a opt="1" href="/module/action/test">foo</a>', 'デフォルトオプションとマージされる(上書き)');
$t->is(link_to_option_selectable('foo', '/test', null, array('opt' => 'default'), array('opt' => '1'), array('opt' => '0')), '<a opt="default" href="/module/action/test">foo</a>', '比較関数がない場合はデフォルトオプションのみ有効');
// renderIndexItem()
$t->diag('renderIndexItem() 内部でrenderIndexItemList()を呼び出す');