Не удается загрузить определенную страницу на codeigniter "slug" - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь загрузить определенную страницу в контроллере. Я следовал учебному пособию по Codeigniter, и основные страницы работают, но отдельная страница (загруженная с просмотром) не загружается в соответствии с заданным фрагментом.

blog.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Blog extends CI_Controller {

/**
 * Index Page for this controller.
 *
 * Maps to the following URL
 *      http://example.com/index.php/index
 *  - or -
 *      http://example.com/index.php/Index/index
 *  - or -

 */

function __construct()
{
    parent::__construct();
    $this->load->model('blog_model');
    $this->load->helper('url_helper');
} 
public function index()
{
    $data['post'] = $this->blog_model->get_posts();
    $data['title'] = 'Blog archive';

    $this->load->view('header', $data);
    $this->load->view('blog', $data);
    $this->load->view('footer', $data);
}

public function view($slug = NULL)
{
    $data['post'] = $this->blog_model->get_posts($slug);    

     if (empty($data['post']))
    {
            show_404();
    }

    $data['title'] = $data['post']['title'];

    $this->load->view('header', $data);
    $this->load->view('post', $data);
    $this->load->view('footer', $data);
}
}

blog_model.php

<?php
class Blog_model extends CI_Model {

    public function __construct()
    {
            $this->load->database();
    }

    public function get_posts($slug = FALSE)
    {

    if ($slug === FALSE)
    {
            $this->db->select('*');
            $this->db->from('blog_posts');
            $this->db->join('category', 'category.id = blog_posts.category_id');
            $this->db->join('author', 'author.id = blog_posts.author_id');
            $query = $this->db->get();
            return $query->result_array();
    }

    $this->db->select('*');
    // $this->db->from('blog_posts');
    $this->db->join('category', 'category.id = blog_posts.category_id');
    $this->db->join('author', 'author.id = blog_posts.author_id');
    // $this->db->where('slug', $slug);
    $query = $this->db->get_where('blog_posts', array('slug' => $slug));
    return $query->row_array();
    }

}

Как вы видите, я попробовал несколько комбинаций, потому что я не уверен, что он извлекает таблицу в get_posts, когда slug не равен false.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

попробуй вот так

вызов url_helper помощник в __construct вроде следующего

$this->load->helper('url');

Теперь обновите route.php, как показано ниже

Если ваш URL похож на

http://www.example.com/blog/view/slug

Ваш рут должен быть таким

$route['blog/view/(:any)'] = 'blog/view/$1';

Если ваш URL похож на

http://www.example.com/view/slug

Ваш рут должен быть таким

$route['view/(:any)'] = 'blog/view/$1';

И, ваша get_posts модель, повторяющая запросы, используйте ее, как показано ниже

public function get_posts($slug = FALSE){
    $this->db->select('*');
    $this->db->from('blog_posts');
    $this->db->join('category', 'category.id = blog_posts.category_id');
    $this->db->join('author', 'author.id = blog_posts.author_id');
    if($slug){
        $this->db->where(compact('slug'));
    }
    $query = $this->db->get();
    return ($query->num_rows() > 1) ? $query->result_array() : $query->row_array();
}
0 голосов
/ 29 апреля 2018

В конце концов я решил это, изменив маршруты:

Сначала у меня было:

$route['default_controller'] = 'Index';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['blog'] = 'blog';
$route['blog/(:any)'] = 'blog/$1';

Так что я изменил его на:

$route['default_controller'] = 'Index';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['blog'] = 'blog';
$route['blog/(:any)'] = 'blog/view/$1';

И изменил имя метода в blog.php из блога для просмотра. «просмотр» выглядит более стандартным, чем «блог», поэтому я оставил его таким. В 'blog / view / $ 1' представляет контроллер, просмотрите метод и, конечно, $ 1 является первым параметром. На самом деле, если я попробую Blog / view / hello-world, это тоже сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...