Передать один или несколько сегментов URI в функцию (воспламенитель кода) - PullRequest
2 голосов
/ 17 января 2012

В настоящее время у меня есть этот URL для просмотра изображения из БД (codeigniter) domain.com/view/id

Я бы хотел принимать несколько идентификаторов, разделенных запятой domain.com/view/id,id,id

Есть идеи, как это сделать? Спасибо


просмотр контроллера:

function view() {
    $id = alphaID($this->uri->segment(1) ,true);

    $this->load->model('Site_model');
    if($query = $this->Site_model->get_images($id)) {
        $data['records'] = $query;
    }   
    $this->load->view('view', $data);


}

<?php if(isset($records)) : foreach($records as $row) : ?>
    <?php if($row->alpha_id == $this->uri->segment(1)): ?>
        <h1><?php echo $row->alpha_id.$row->file_ext; ?></h1>
    <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Используйте это в вашем контроллере

function view() {
    $id = $this->uri->segment(1);
    $id_array = explode(",", $id);
    $this->load->model('Site_model');
    foreach ($id_array as $key => $id) {
    // use alphaID function
    $id = alphaID($id ,true);
    if($query = $this->Site_model->get_images($id)) {
        $data['records_array'][$key] = $query;
    // added second array for comparison in view
        $data['id_array'][$key] = $id;
    } 
    }  
    $this->load->view('view', $data);
}

Для вашего просмотра:

<?php 
foreach ($records_array as $key => $records) {
if(isset($records)) : foreach($records as $row) : ?>
    // removed uri and added array
    <?php if($row->alpha_id == $id_array[$key]):    ?>
        <h1><?php echo $row->alpha_id.$row->file_ext; ?></h1>
    <?php endif; ?>
    <?php endforeach; ?>
<?php endif; 
}
?>
1 голос
/ 17 января 2012

Вы правы, вы можете добавить запятую в $config['permitted_uri_chars'], но вам придется манипулировать этим сегментом каждый раз, когда вам это нужно, если только вы не подключитесь к ядру системы.

Не проверяли этот код, но вы получите представление:

<?php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,'; // Note a comma...

// Controller
class Blog extends CI_Controller
{

    public function posts($ids = NULL)
    {
        // Check if $ids is passed and contains a comma in the string
        if ($ids !== NULL AND strpos($ids, ',') !== FALSE)
        {
            $ids = explode(',', $ids);
        }

        // Convert $ids to array if it has no multiple ids
        is_array($ids) OR $ids = array($ids);

        // $ids is an array now...

    }

    public function new_posts()
    {
        // Check if $ids is passed and contains a comma in the string
        $ids = $this->uri->segment(1);
        if (!empty($ids) AND strpos($ids, ',') !== FALSE)
        {
            $ids = explode(',', $ids);
        }

        // Convert $ids to array if it has no multiple ids
        is_array($ids) OR $ids = array($ids);

        // $ids is an array now...

    }

}

?>

example.com/index.php/blog/posts/2,4,6,8

Пожалуйста, обратите внимание еще раз, код может быть неточным, потому что я его не проверял, но думаю, что он вам поможет.

1 голос
/ 17 января 2012

Поскольку запятые не являются допустимыми элементами пути, вы не сможете заставить это работать, если у вас нет разделенных данных справа от?персонаж.Вам нужно будет придумать другую схему или оставить комментарий от @ jprofitt.

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