Получить идентификатор из foreach и маршрут без каких-либо букв в CodeIgniter - PullRequest
1 голос
/ 08 марта 2012

Я работаю над новым проектом php с CodeIgniter, и у меня есть несколько вопросов по этому поводу.

1 - Я создал скрипт новостей, сейчас я сделал бэкэнд и работаю над фронтэндом. На фронтенде я уже устанавливал последние новости, но я хочу показать, сколько комментариев в одной новости есть. Я использовал foreach, но я не знаю, как лучше всего делать дальше в MVC framework.

<?php
foreach ($query as $news)
{
    echo $news->title . "<br>" . $news->content . "<br>";
    $commentnum = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments');
    echo $commentnum->num_rows();
}
?>

Хорошо ... это часть кода, которую я использую в других проектах. Как лучше всего использовать этот код в шаблоне MVC?

2 - В этом новостном скрипте у меня есть некоторый контроллер, который называется News и в нем есть функции post, cats и tags. И код, который я использую сейчас, но не работает так, как я хочу:

$route['news/(:any)'] = "news/post/$1";

Итак, как исключить сообщение, кошек и теги из маршрута -> Если я наберу news/tags/first, чтобы сначала получить тег, а не ошибку, чтобы сообщение не существовало. Как это сделать?

1 Ответ

0 голосов
/ 08 марта 2012

Если вы хотите придерживаться шаблона MVC (и я бы посоветовал вам сделать это, так как это упрощает управление вашим приложением или обновляет его внешний вид), тогда сделайте следующее:

Вместо этогоиз echo, извлекая всю информацию о новостях, сохраняйте ее в массив и передавайте этот массив в VIEW.Позвольте VIEW затем просто пройти через этот массив (новостей и связанных комментариев) и вывести его.

Таким образом, ваша логика для сборки этой структуры новостей / комментариев остается в контроллере, а представление просто выплевывает данные, и НЕ ITERATE через объект $query.

Это создает чистое разделение контроллера, модели и вида.

Пример:

foreach ($query as $news)
{
    $comments = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments');        
    $data['news'][$news->id]['title'] = $news->title;
    $data['news'][$news->id]['content'] = $news->content;
    $data['news'][$news->id]['num_comments'] = $comments->num_rows();

    if($data['news'][$news->id]['num_comments'] > 0){
        foreach ($comments as $entry){
              $data['news'][$news->id][$entry->id]['comment'] = $entry->content;  
        }
    }
}

Что касается вашей проблемы с маршрутизацией, вам необходимо правильно направить URI к МЕТОДУ в вашем контроллере:

$route['tags/(:any)'] = "news/tags/$1";
$route['(:any)'] = "news/posts/$1";

$route['(:any)'], который я лично не пробовал, , но Я бы посоветовал вам отформатировать ваш URI, например, http://domain.com/post/name-of-post, а не http://domain.com/name-of-post, он будет более чистым для маршрутизации, оставляя его отдельным, потому что вышеприведенный маршрут $route['(:any)'] заставляет вас создавать CUSTOM-маршруты (белый список) для всего остального, как теги / ссылки / пользователи / и т. д .;

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