Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 20:11

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 17:03 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток.
Подскажите как реализовать вывод всех записей категорий к которой принадлежит определенная статья.
Есть ID статьи который привязан к нескольким IDкатегорий. В конце статьи хочу вывести, что то типа тегов.
С уважением, Роман.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 17:20 
Не в сети
Супермодератор
Аватара пользователя

Зарегистрирован: 13 фев 2012, 22:24
Сообщения: 65
Откуда: оттуда
Получаем id категорий. Потом SELECT .... WHERE id IN (тут список ид).
Наверное так. Не очень понял задачу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 17:49 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
-Не очень понял задачу.
Сори.
Я получаю список со статьями. В запросе три join. Что бы статьи не повторялись делаю group_by('posts_id')
Далее foreach-ом пробегаюсь по массиву и вывожу статьи. В конце хочу вывести теги.
Если я уберу group_by('posts_id'), то статьи будут повторяться но с разными тегами.
Я предполагаю один только вариант, да и то не знаю ка реализовать:
Внутри цикла выдергиваю ID статьи -> передаю в модель (как?) -Возвращаю массив с категориями.
..надеюсь получилось объяснить задачу..
С уважением, Роман


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 19:47 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Покажите таблицы материалов, категорий и их модели


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 19:52 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Использую базу Wordpress


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 19 авг 2012, 21:14 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Модели


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 20 авг 2012, 20:02 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Доброго времени суток. Вот собственно. Оно?
Или с офсайта


Вложения:
wp-mysql.png
wp-mysql.png [ 14.92 КБ | Просмотров: 6648 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 20 авг 2012, 21:47 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Это схема базы данных. Покажите модели


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 20 авг 2012, 22:36 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Сори, туплю..
Модель одна:
Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Model_Post extends Model
{
    protected $_tablePosts = 'wp_posts';
    protected $_tableUsers = 'wp_users';
    protected $_tableTerms1 = 'wp_term_relationships';
    protected $_tableTerms2 = 'wp_terms';
    protected $_tableTerms3 = 'wp_term_taxonomy';
 
    public function get_all()
    {
        $query = DB::select('wp_users.*', 'wp_posts.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->where('wp_posts.post_status', '=', 'publish')
                ->order_by('post_date', 'desc')
                ->limit(10);
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_n()
    {
        $query = DB::select('wp_users.*', 'wp_posts.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_posts.post_author', '=', 'wp_users.id')
                ->where('wp_posts.post_status', '=', 'publish')
                ->order_by('post_date', 'desc')
                ->limit(2);
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_pages()
    {
       
        $query = DB::select()
                ->from($this->_tablePosts)
                ->where('wp_posts.post_type', '=', 'page')
                ->order_by('menu_order');
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_page($id = '')
    {
       
        $query = DB::select('wp_users.*', 'wp_posts.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->where('wp_posts.post_type', '=', 'page')
                ->where('wp_posts.id', '=', $id)
                ->order_by('menu_order')//;
                ->limit(1);
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_list()
    {
       
        $query = DB::select('wp_users.*', 'wp_posts.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->where('wp_posts.post_status', '=', 'publish')
                ->order_by('post_date', 'desc')
                ->limit(10);
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_article($id = '')
    {
        $query = DB::select('wp_posts.*', 'wp_users.*', 'wp_term_relationships.*', 'wp_terms.*', 'wp_term_taxonomy.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->join($this->_tableTerms1)->on('wp_posts.ID', '=', 'wp_term_relationships.object_id')
                ->join($this->_tableTerms2)->on('wp_term_relationships.term_taxonomy_id', '=', 'wp_terms.term_id')
                ->join($this->_tableTerms3)->on('wp_terms.term_id', '=', 'wp_term_taxonomy.term_id')
                ->where('wp_posts.post_status', '=', 'publish')
                ->where('wp_posts.ID', '=', $id)
                ->order_by('post_date', 'desc')
                ->group_by('posts_id');
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_cat_n()
    {
        $query = DB::select('wp_posts.*', 'wp_users.*', 'wp_term_relationships.*', 'wp_terms.*', 'wp_term_taxonomy.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->join($this->_tableTerms1)->on('wp_posts.ID', '=', 'wp_term_relationships.object_id')
                ->join($this->_tableTerms2)->on('wp_term_relationships.term_taxonomy_id', '=', 'wp_terms.term_id')
                ->join($this->_tableTerms3)->on('wp_terms.term_id', '=', 'wp_term_taxonomy.term_id')
                ->where('wp_posts.post_status', '=', 'publish')
                ->where('taxonomy', '=', 'category')
                ->order_by('post_date', 'desc')
                ->group_by('wp_terms.term_id');
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
    public function get_cat_n_n()
    {
        $query = DB::select('wp_posts.*', 'wp_users.*', 'wp_term_relationships.*', 'wp_terms.*', 'wp_term_taxonomy.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->join($this->_tableTerms1)->on('wp_posts.ID', '=', 'wp_term_relationships.object_id')
                ->join($this->_tableTerms2)->on('wp_term_relationships.term_taxonomy_id', '=', 'wp_terms.term_id')
                ->join($this->_tableTerms3)->on('wp_terms.term_id', '=', 'wp_term_taxonomy.term_id')
                ->where('wp_posts.post_status', '=', 'publish')
                ->where('taxonomy', '=', 'category')
                ->order_by('post_date', 'desc')
                ->limit(5);
       
        $result = $query->execute()->as_array();
        return $result;
    }
    public function get_category($id = '')
    {
        $query = DB::select('wp_posts.*', 'wp_users.*', 'wp_term_relationships.*', 'wp_terms.*', 'wp_term_taxonomy.*', array('wp_users.id', 'users_id'), array('wp_posts.id', 'posts_id'))
                ->from($this->_tablePosts)
                ->join($this->_tableUsers)->on('wp_users.id', '=', 'wp_posts.post_author')
                ->join($this->_tableTerms1)->on('wp_posts.ID', '=', 'wp_term_relationships.object_id')
                ->join($this->_tableTerms2)->on('wp_term_relationships.term_taxonomy_id', '=', 'wp_terms.term_id')
                ->join($this->_tableTerms3)->on('wp_terms.term_id', '=', 'wp_term_taxonomy.term_id')
                ->where('wp_posts.post_status', '=', 'publish')
                ->where('wp_terms.term_id', '=', $id)
                ->order_by('post_date', 'desc')
                ->group_by('posts_id')
                ->limit(10);
       
        $result = $query->execute()->as_array();
        return $result;
    }
   
}


Код главного контроллера:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Main extends Controller_Template {

    public $template = 'basic';
   
    public function action_index()
    {
        $posts    = array();
        $articles = array();
        $cats     = array();
        $navs    = array();
 
        $content = View::factory('themes/home')
                ->bind('posts', $posts)
                ->bind('articles', $articles)
                ->bind('cats', $cats)
                ->bind('navs', $navs);
 
        $posts    = Model::factory('Post')->get_cat_n_n();
        $articles = Model::factory('Post')->get_list();
        $cats     = Model::factory('Post')->get_cat_n();
        $navs   = Model::factory('Post')->get_pages();
 
        $this->template->content = $content;
    }

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод категорий у статьи
СообщениеДобавлено: 20 авг 2012, 22:42 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
В вашем, как как и в общем случае, одной модели недостаточно. 1 таблица = 1 модель


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group