<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 讀取新聞條目 在上一節中,我們通過寫出一個包含靜態頁面的類了解了一些框架的基本概念, 我們也根據自定義路由規則來重定向 URI 。現在是時候向大家介紹動態內容 和如何使用數據庫了。 ## 創建你的數據模型 數據庫的查詢操作應該放在模型里,而不是寫在控制器里,這樣可以很方便的重用它。 模型正是用于從數據庫或者其他存儲中獲取、新增、更新數據的地方。它就代表你的數據。 打開?application/models/?目錄,新建一個文件?News_model.php?,然后寫入下面的代碼。 確保你的?[數據庫配置](http://codeigniter.org.cn/user_guide/database/configuration.html)?正確。 ~~~ <?php class News_model extends CI_Model { public function __construct() { $this->load->database(); } } ~~~ 這個代碼和之前的控制器的代碼有點類似,它通過繼承?CI_Model?創建了一個新模型, 并加載了數據庫類。數據庫類可以通過?$this->db?對象訪問。 在查詢數據庫之前,我們要先創建一個數據庫表。連接你的數據庫,運行下面的 SQL 語句 (MySQL),并添加一些測試數據。 ~~~ CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT, title varchar(128) NOT NULL, slug varchar(128) NOT NULL, text text NOT NULL, PRIMARY KEY (id), KEY slug (slug) ); ~~~ 現在,數據庫和模型都準備好了,你需要一個方法來從數據庫中獲取所有的新聞文章。 為實現這點,我們使用了 CodeIgniter 的數據庫抽象層?[查詢構造器](http://codeigniter.org.cn/user_guide/database/query_builder.html)?, 通過它你可以編寫你的查詢代碼,并在?[所有支持的數據庫平臺](http://codeigniter.org.cn/user_guide/general/requirements.html)?上運行。 向你的模型中添加如下代碼。 ~~~ public function get_news($slug = FALSE) { if ($slug === FALSE) { $query = $this->db->get('news'); return $query->result_array(); } $query = $this->db->get_where('news', array('slug' => $slug)); return $query->row_array(); } ~~~ 通過這個代碼,你可以執行兩種不同的查詢,一種是獲取所有的新聞條目,另一種 是根據它的?[slug](http://codeigniter.org.cn/user_guide/tutorial/news_section.html#)?來獲取新聞條目。你應該注意到,$slug?變量在執行查詢之前 并沒有做檢查,?[查詢構造器](http://codeigniter.org.cn/user_guide/database/query_builder.html)?會自動幫你檢查的。 ## 顯示新聞 現在,查詢已經寫好了,接下來我們需要將模型綁定到視圖上,向用戶顯示新聞條目了。 這可以在之前寫的?Pages?控制器里來做,但為了更清楚的闡述,我們定義了一個新的?News?控制器,創建在?application/controllers/News.php?文件中。 ~~~ <?php class News extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('news_model'); $this->load->helper('url_helper'); } public function index() { $data['news'] = $this->news_model->get_news(); } public function view($slug = NULL) { $data['news_item'] = $this->news_model->get_news($slug); } } ~~~ 閱讀上面的代碼你會發現,這和之前寫的代碼有些相似之處。首先是?__construct()?方法,它調用父類(CI_Controller)中的構造函數,并加載模型。這樣模型就可以 在這個控制器的其他方法中使用了。另外它還加載了?[URL 輔助函數](http://codeigniter.org.cn/user_guide/helpers/url_helper.html)?, 因為我們在后面的視圖中會用到它。 其次,有兩個方法用來顯示新聞條目,一個顯示所有的,另一個顯示特定的。 你可以看到第二個方法中調用模型方法時傳入了?$slug?參數,模型根據這個 slug 返回特定的新聞條目。 現在,通過模型,控制器已經獲取到數據了,但還沒有顯示。下一步要做的就是, 將數據傳遞給視圖。 ~~~ public function index() { $data['news'] = $this->news_model->get_news(); $data['title'] = 'News archive'; $this->load->view('templates/header', $data); $this->load->view('news/index', $data); $this->load->view('templates/footer'); } ~~~ 上面的代碼從模型中獲取所有的新聞條目,并賦值給一個變量,另外頁面的標題賦值給了?$data['title']?元素,然后所有的數據被傳遞給視圖。現在你需要創建一個視圖文件來 顯示新聞條目了,新建?application/views/news/index.php?文件并添加如下代碼。 ~~~ <h2><?php echo $title; ?></h2> <?php foreach ($news as $news_item): ?> <h3><?php echo $news_item['title']; ?></h3> <div class="main"> <?php echo $news_item['text']; ?> </div> <p><a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a></p> <?php endforeach; ?> ~~~ 這里,通過一個循環將所有的新聞條目顯示給用戶,你可以看到我們在 HTML 模板中混用了 PHP , 如果你希望使用一種模板語言,你可以使用 CodeIgniter 的?[模板解析類](http://codeigniter.org.cn/user_guide/libraries/parser.html)?, 或其他的第三方解析器。 新聞的列表頁就做好了,但是還缺了顯示特定新聞條目的頁面,之前創建的模型可以很容易的 實現該功能,你只需要向控制器中添加一些代碼,然后再新建一個視圖就可以了。回到?News?控制器,使用下面的代碼替換掉?view()?方法: ~~~ public function view($slug = NULL) { $data['news_item'] = $this->news_model->get_news($slug); if (empty($data['news_item'])) { show_404(); } $data['title'] = $data['news_item']['title']; $this->load->view('templates/header', $data); $this->load->view('news/view', $data); $this->load->view('templates/footer'); } ~~~ 我們并沒有直接調用?get_news()?方法,而是傳入了一個?$slug?參數, 所以它會返回相應的新聞條目。最后剩下的事是創建視圖文件application/views/news/view.php?并添加如下代碼 。 ~~~ <?php echo '<h2>'.$news_item['title'].'</h2>'; echo $news_item['text']; ~~~ ## 路由 由于之前創建的通配符路由規則,你需要新增一條路由來顯示你剛剛創建的控制器, 修改你的路由配置文件(application/config/routes.php)添加類似下面的代碼。 該規則可以讓請求訪問?News?控制器而不是?Pages?控制器,第一行可以讓 帶 slug 的 URI 重定向到?News?控制器的?view()?方法。 ~~~ $route['news/(:any)'] = 'news/view/$1'; $route['news'] = 'news'; $route['(:any)'] = 'pages/view/$1'; $route['default_controller'] = 'pages/view'; ~~~ 把瀏覽器的地址改回根目錄,在后面加上 index.php/news 來看看你的新聞頁面吧。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看