0

さまざまなページにさまざまなサイドバーを生成するための柔軟な方法を探していました。目標は、各サイドバーにカスタムリンクを渡すことです。テンプレートライブラリは私のアプリケーションにはやり過ぎのようだったので、簡単なソリューションを開発しました。それが最善の解決策かどうかはわかりません。私の質問はどう思いますか?あなたのアドバイスは大歓迎です!

1。コントローラに、サイドバービューをロードするプライベート関数を追加します。

/**
 * The function has 2 arguments. 
 * $title is the sidebar widget title.
 * $widget will contain an array of links to be added in the sidebar widget.
 */

private function sidebar($title, $widget)   
{
    $widget['title'] = $title;
    $this->load->view('includes/sidebar', $widget); 
}

2.カスタムサイドバーをロードするコントローラー関数で、プライベート関数を呼び出し、sidebar()目的のサイドバーデータをその関数に渡します。

edit以下は、投稿の編集に使用されるという名前のコントローラー関数です。この例では、自分がいる投稿を表示および削除するためのオプションを含むサイドバーをロードする必要があります。

function edit($post_id = '')
{
    //your code, form validation, etc...

    //Prepare sidebar widget links
    //Array key is link url, array value is link name
    $widget['links'] = array (
        'posts/single/' . $post_id => 'View post',
        'posts/remove/' . $post_id => 'Remove post'
    );
    $this->sidebar('Options', $widget);  //load sidebar  
}

3.最後に、コントローラーから渡されたカスタムデータを表示するサイドバービュー:

<div id="sidebar">
    <ul>
        <li class="widget">
            <div class="label"><?php echo $title; ?></div>
            <ul>
                <?php foreach ($links as $link => $value): ?>
                    <li><?php echo anchor($link, $value); ?></li>
                <?php endforeach; ?>
            </ul>
        </li>
    </ul>
</div>

結論

カスタムサイドバーのタイトルとリンクのコントローラー関数に次のコードを追加します。

$widget['links'] = array (
            'controller/function' => 'Link Name 1',
            'controller/function' => 'Link Name 2',
            'controller/function' => 'Link Name 3'
);
$this->sidebar('Widget Title', $widget);
4

1 に答える 1

3

それで済むと思います。私は CodeIgniter の専門家ではありませんが、それで十分だと言えます。常に確認する必要があることの 1 つは、関数に渡されるデータを検証することです。この場合:

private function sidebar($title=FALSE, $widget=FALSE) {
   if ($title && $widget) {
      //process
   }
   else
      return FALSE
   }
}

もう 1 つの方法は、リンクをテンプレート (サイドバー テンプレートではなく、メイン テンプレート:

$data['sidebar'] = array('link/link'=>'My Link');
$this->load->view('mytemplate', $data);

テンプレートでは、サイドバー テンプレートを読み込み、データを渡します。

<html>
<!--All my html-->
<?php $this->load->view('includes/sidebar', $data['sidebar']); ?>
</html>

これは単なる別のオプションです。しかし、あなたがしたことは問題ありません。

于 2012-06-29T22:39:01.193 に答える