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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Вывод заголовков страниц
СообщениеДобавлено: 15 мар 2013, 17:02 
Не в сети
Зеленый

Зарегистрирован: 15 мар 2013, 16:28
Сообщения: 5
Здравствуйте, люди добрые! Помогите разобраться - при выводе статей из БД по id никак не могу вывести заголовки страниц вот код контроллера
Код:
class Controller_Catalog extends Controller_Welcome {
 
   /**
    * Выводим разделы каталога и краткую информацию о компаниях
    */
    // Извлекаем и выводим контент разделов каталога
   public function action_category()
    {
        $id = $this->request->param('id');
 
      $content = View::factory('/pages/category')
                      ->bind('categories', $categories)
                  ->bind('companies', $companies);
                       
      $categories = Model::factory('Catalog')->get_catalog($id);
      $companies_url = 'companies/' . $id;
        $companies = Request::factory($companies_url)->execute();
      
      
      $this->template->content = $content;
      
   }
   
пытался передавать по аналогии переменную title но в виде ничего не выводится. Прошу прощения если пишу не в том разделе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 16 мар 2013, 03:08 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Ну, во первых для начала оформите код нормально:

Код:
<?php

class Model_Catalog {

  public function __get($field)
  {
    switch ($field)
    {
      case 'url':
        return 'companies/' . $this->id;
      break;
      case 'catalog':
        return $this->get_catalog($this->id);
      break;
      case 'companies':
        return Request::factory($this->url)->execute();
      break;
    }

    return parent::__get($field);
  }

  public function get_catalog($id)
  {
    ...
  }
}


class Controller_Catalog extends Controller_Welcome {

  public function action_category()
  {
    $id = $this->request->param('id', 0);

    $categories = Model::factory('Catalog', $id);

    if ( ! $categories->loaded())
    {
      throw new HTTP_Exception_404('Attempt to non-existent categories.');
    }

    $content = View::factory('pages/category')
                    ->bind('categories', $categories->catalog)
                    ->bind('companies',  $categories->companies);

    $this->template->content = $content;
  }

}


Во вторых, почему не ORM?
И в третьих, покажите модель


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 16 мар 2013, 08:56 
Не в сети
Зеленый

Зарегистрирован: 15 мар 2013, 16:28
Сообщения: 5
Сергей, спасибо за проявленное внимание.
По поводу кода - прошу отнестись снисходительно к 40ка летнему ученику, стараюсь придерживаться стандартов, и писать аккуратно но видимо не всегда получается.
Вот код модели
Код:
class Model_Catalog extends Model
{
    protected $_tableCatalogs = 'categories';
 
    /**
     * Извлекаем все данные из таблицы categories
     * @возвращаем массив
     */
    public function get_all()
    {
        $sql = "SELECT * FROM ". $this->_tableCatalogs;
 
        return DB::query(Database::SELECT, $sql)
                   ->execute();
    }
    /**
     * Извлекаем данные из таблицы categories по id
     * @возвращаем массив
     */
       public function get_catalog($id = '')
    {
        $sql = "SELECT * FROM ". $this->_tableCatalogs ." WHERE `id` = :id";
 
        $query = DB::query(Database::SELECT, $sql, FALSE)
                         ->param(':id', (int)$id)
                         ->execute();
 
        $result = $query->as_array();
 
        if($result)
            return $result[0];
        else
            return FALSE;
    }

Почему не ORM - думаю что исходя из сложности приложения достаточно аппаратного подхода.
На чем я собственно встал в ступор - модель извлекает все данные из таблицы, в контроллере данные передаются в файл вида
Код:
View::factory('/pages/category')
здесь же пытался по аналогии передавать переменную title в основной шаблон template но выдает ошибку, либо переменная не выводится вообще, не могу догнать как вывести переменную в основной шаблон.
Кстати разбирал Ваш базовый контроллер выложенный на форуме, что то понятно что то не очень, но одно понятно точно учиться, учиться и учиться. Очень понравилось ваше решение вывода заголовков страниц, теория понятна, но глубины знаний для самостоятельной реализации пока не хватает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 16 мар 2013, 09:03 
Не в сети
Зеленый

Зарегистрирован: 15 мар 2013, 16:28
Сообщения: 5
Прошу прощения что не выкладываю код своих попыток решения задачи, на данный момент откатился к рабочему коду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 16 мар 2013, 10:58 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Для начала выкиньте весь мусор из модели и занимайтесь в ней только тем, для чего она предназначена - получением данных.

Код:
<?php defined('SYSPATH') OR die('No direct script access.');

class Model_Catalog extends Model {

    /**
     * Table name
     * @var string
     */
    protected $_table_name = 'categories';

    /**
     * Get all categories
     *
     * @param   integer  $limit   Limit
     * @param   integer  $offset  Offset [Optional]
     * @return  Database_Result
     */
    public function get_all($limit, $offset = 0)
    {
        return DB::select()
                  ->from($this->_table_name)
                  ->order_by('id','DESC')
                  ->limit($limit)
                  ->offset($offset)
                  ->execute();
    }

    /**
     * Get a category
     *
     * @param   integer  $id  Category ID
     * @return  Database_Result
     */
    public function get_one($id)
    {
        return DB::select()
                  ->from($this->_table_name)
                  ->where('id', '=', (int)$id)
                  ->execute();
    }
}


Проверить что (и сколько) вернули методы модели можно и нужно в вашем случае в контролёре.
Вообще, не доводите до того, чтоб контролёр отобразил представление когда данных у вас не выбрано.
Т.е. если метод модели вернул 0, то сообщайте об этом в контролёре, выводите сообщение пользователю с соответствующим редиректом.

У вас же есть нативные count(), empty(), is_null(), isset() в принципе всё элементарно

Если путаетесь какой тип данных вам вернула модель, всегда можно выполнить следующую уловку:

Код:
// код в котролёре
public function action_view()
{
    $id = (int) $this->request->param('id', 0);
    ...
    $categories = Model::factory('Catalog')->get_one($id);

    // echo Debug::vars здесь означает напечатать на экране полный дамп $categories с указанием типа данных
    // exit здесь означает сразу же остановить выполнение какой либо деятельности
    echo Debug::vars($categories);exit;
}


Далее.
В каком это виде передавать в представление решать вам. По мне, так нагляднее будет объектом. А хотите массивом - дело ваше. Так или иначе у вас на вооружении есть as_array() и as_object(). Полученную переменную перебирайте в foreach, в каждой итерации строя строку таблицы или что там у вас. Но важно помнить одно, представление предназначенное для отображение данных, не должно получать 0/NULL и затем как то обрабатывать эту ситуацию - реагировать на неё. Всем этим должен заниматься контролёр. Представление оно на то и представление - чтоб представлять, не более.

Мне как то сказал один рубист, что самые страшные представления, где намешано всё, именно у похапистов :)
Согласен


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 17 мар 2013, 13:52 
Не в сети
Зеленый

Зарегистрирован: 15 мар 2013, 16:28
Сообщения: 5
Сергей, спасибо за помощь, решил задачу.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод заголовков страниц
СообщениеДобавлено: 17 мар 2013, 21:56 
Не в сети
Зеленый

Зарегистрирован: 15 мар 2013, 16:28
Сообщения: 5
Проверил что выводится в виде используя фокус-покус который вы подсказали
Код:
echo Debug::vars($categories);exit;
title выводится в <h1> но в тегах title пусто, т.е. значения переменной доходит до вида но не выводиться в заголовке страницы
в общем все банально, было
Код:
<title><?php echo $title; ?></title>
дописал
Код:
<title><?php echo $title['title']; ?></title>
но это решение промежуточное и насколько я понимаю не совсем корректное при использовании МВС, планирую отработать все ваши рекомендации до конца, о результатах отпишусь.
Еще раз спасибо за помощь


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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