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

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 23 янв 2021, 15:02

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




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

Зарегистрирован: 17 сен 2012, 13:35
Сообщения: 91
честно? копипастила, естественно, но дефолтные значения fio и id добавлять не стала.
кстати, на счет роутов с одинаковыми названиями. естественно они у меня все с одним и тем же названием. объясню почему, когда начала с ними работать, ничего естественно не получалось(когда роуты со своим названием вылетает ошибка про неправильность роута), как только я всех их обозвала дефолтными, то по страницам начал бегать нормально, но вот как раз функции, которые на них накладывались, типа пагинации, не выполнялись.


Странно :shock: , сейчас ошибка не вылетает, ясен пень - чудес не бывает и где-то до этого ошибка была, но где...

проблема с HTTP_Exception_404 [ 404 ]: The requested URL editcustomer/2-Гадиева Елена Юрьевна was not found on this server. не ушла(


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

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
prickle писал(а):
кстати, на счет роутов с одинаковыми названиями. естественно они у меня все с одним и тем же названием. объясню почему, когда начала с ними работать, ничего естественно не получалось(когда роуты со своим названием вылетает ошибка про неправильность роута), как только я всех их обозвала дефолтными, то по страницам начал бегать нормально, но вот как раз функции, которые на них накладывались, типа пагинации, не выполнялись.

Специально залез в исходники класса Route, проверил - если у вес все роуты с одинаковым именем, то каждый следующий будет перезаписывать предыдущий. В итоге у вас реально работать будет только последний, про остальные кохана даже знать не будет. Все дело в том, что имя роута - это ключ в массиве всех роутов, соответственно ваш массив будет состоять только из одного роута. То, что это как-то работало - смесь фантастического везения и универсальности последнего прописанного роута.

Кстати, советую поставить модуль profiler-toolbar, в нем очень удобно проверять какие роуты зарегистрированы в кохане и какой роут отработал на текущий запрос ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод статей по ид
СообщениеДобавлено: 24 июл 2013, 09:37 
Не в сети
Новичок

Зарегистрирован: 22 июл 2013, 10:30
Сообщения: 10
Здравствуйте, делал всё по мануалке, всё хорошо работало, после решил переделать под собственные нужды, не получилось, откатил изменения назад, на образец, тоже почему то не работает. Сравнил с образцом на сайте, вроде всё одинаково. у меня Kohana 3.3.

Контроллер Page:


Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller_Page extends Controller_Common {
 
    public function action_index()
    {
        $articles = array();
 
        $content = View::factory('/pages/Show')
                ->bind('articles', $articles);
 
        $articles = Model::factory('Article')->get_all();
 
        $this->template->content = $content;
    }
 
}



Контроллер Articles

Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller_Articles extends Controller_Common {
 
    public function action_index()
    {
        $content = View::factory('/pages/Articles');
        $this->template->content = $content;
    }
 
    public function action_article()
    {
        $id = $this->request->param('id');
 
        $content = View::factory('/pages/Article')
                        ->bind('article', $article)
                        ->bind('comments', $comments);
 
        $article = Model::factory('Article')->get_article($id);
 
        $comments_url = 'comments/' . $id;
        $comments = Request::factory($comments_url)->execute();
 
        $this->template->content = $content;
    }   
 
}



Модель Articles

Код:
<?php defined('SYSPATH') or die('No direct script access.');
 
class Model_Article extends Model
{
    protected $_tableArticles = 'articles';
 
    public function get_all()
    {
        $sql = "SELECT * FROM ".$this->_tableArticles;
 
        return DB::query(Database::SELECT, $sql)
                   ->execute();
    }
   
   public function get_article($id = '')
    {
        $sql = "SELECT * FROM {$this->_tableArticles} 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;
    }
}



Вид Show

Код:
<h3>Это главная страница</h3>
<br />
 
<?php foreach($articles as $article): ?>
 
    <div style="padding:10px; margin-bottom:10px; border-bottom:#333 2px solid;">
        <strong><?php echo $article['title']; ?></strong><br />
        <i>Автор: <?php echo $article['author']; ?></i>
        <i>Дата публикации: <?php echo $article['date']; ?></i><br /><br />
        <p><?php echo $article['content_short']; ?></p>
        <p style="text-align:right; text-decoration:underline;">
            <a href="<?php echo URL::site('articles/'. $article['id'] .'-'. $article['alt_title']); ?>">Подробнее</a>
        </p>
    </div>
 
<?php endforeach; ?>


Вид Article
Код:
<?php if($article): ?>
    <div style="padding:10px; margin-bottom:10px; border-bottom:#333 2px solid;">
        <strong><?php echo $article['title']; ?></strong><br />
        <i>Автор: <?php echo $article['author']; ?></i> /
        <i>Дата публикации: <?php echo $article['date']; ?></i><br /><br />
        <p><?php echo $article['content_full']; ?></p>
    </div>   
    <?php echo $comments; ?>
<?php else: ?>
    <div style="padding:10px; margin-bottom:10px;">
      Статья не найдена или не существует
    </div>
<?php endif; ?>



Все Роуты(Идут именно в таком порядке)

Код:
Route::set('static', '<action>(/<id>)', array('action' => 'about|contacts'))
        ->defaults(array(
            'controller' => 'static',
    ));
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
            ->defaults(array(
            'directory'  => 'admin',
            'controller' => 'main',
            'action'     => 'index',
            ));
Route::set('comments', 'comments/<id>', array('id' => '.+'))
   ->defaults(array(
      'controller' => 'comments',
      'action'     => 'index',      
   ));
Route::set('articles', '<articles>/<id>-<altname>', array('id' => '[0-9]+'), array('altname' => '.+'))
   ->defaults(array(
      'controller' => 'articles',
      'action'     => 'article',      
   ));
Route::set('default', '(<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'controller' => 'page',
      'action'     => 'index',
   ));



P.S. Подскажите, почему не пишет логи в файл? Если появляется ошибка он показывает(всегда только это):
ErrorException [ 8 ]: Array to string conversion ~ SYSPATH/classes/Kohana/Log/Writer.php [ 81 ]

Права проставлены (на папку логов и рекурсивно, на все вложенные файлы и папки): 777.


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Alexk91 перешел на php 5.4? думаю это решение твоей плакали:
http://forum.kohanaframework.org/discus ... _writer/p1

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод статей по ид
СообщениеДобавлено: 25 июл 2013, 09:15 
Не в сети
Новичок

Зарегистрирован: 22 июл 2013, 10:30
Сообщения: 10
Спасибо, буду пробовать. Да 5.4, я и забыл поменять. И с логированием я разобрался, оказалось забыл окружение поставить.

P.S. Пардон, сначала отписал, потом начал читать. с логами я разобрался. А с ошибкой уже забил, и делаю всё заново, Kohan'у учу только, так что лишним не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод статей по ид
СообщениеДобавлено: 29 июл 2013, 13:49 
Не в сети
Новичок

Зарегистрирован: 22 июл 2013, 10:30
Сообщения: 10
Здравствуйте ещё раз. Появилась проблема, при ыводе по id показывает только первую запись.

Контроллер:

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

class Controller_Object extends Controller_Common {

   public function action_Objects()
   {
      $objects = array();

      $content = View::factory('/pages/Objects')
            ->bind('objects', $objects);

      $objects = Model::factory('Object')->get_all();
 
      $this->template->content = $content;
   }
    public function action_object()
   {
      //$id = $this->request->param('id');
      
      $id = Arr::get($_POST, 'id');

      $content = View::factory('/pages/Object')
                  ->bind('object', $object);

      $object = Model::factory('Object')->get_object($id);

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


Модель:

Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Object extends Model {

      protected $_tableObjects = 'testit';
      
   public function get_all()
   {
      $sql = "SELECT * FROM ". $this->_tableObjects ." LIMIT 10";

      return DB::query(Database::SELECT, $sql)
               ->execute();
   }
   
   public function get_object($id = '')
   {
      $sql = "SELECT * FROM ". $this->_tableObjects ." 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;
   }
}


Вид(все записи):

Код:
<?php foreach($objects as $object): ?>
 
    <div style="padding:10px; margin-bottom:10px; border-bottom:#333 1px dashed;">
        <strong><a href="<?php echo URL::site('object/'. $object['id']); ?>"><?php echo $object['city']." ул.".$object['street']." д.".$object['n_house']." кв. ".$object['flat']; ?></a></strong><br/><br/>
        <i>Агент: <?php echo $object['agent']; ?></i> /
        <i>Дата публикации: <?php echo $object['date_phoned']; ?></i><br /><br/>
        <p><?php echo $object['note']; ?></p><br>
      <p><?php echo "Цена: ".$object['cost']." тыс.руб.";?></p>
      <p style="text-align:right; text-decoration:underline;">
        <a href="<?php echo URL::site('object/'. $object['id']); ?>">Подробнее</a>
        </p>
    </div>
 
<?php endforeach; ?>


Вид(одна запись, детально):

Код:
<?php if($object): ?>
    <div style="padding:10px; margin-bottom:10px;">
        <strong><?php echo $object['city']." ".$object['district']." ул.".$object['street']." д.".$object['n_house']." кв.".$object['flat']; ?></strong><br />
        <p><?php echo "Корпус: ".$object['housing'];?></p>
      <p><?php echo "Подъезд: ".$object['porch'];?></p>
      <p><?php echo "Этаж: ".$object['floor'];?></p>
      <p><?php echo "Этажность дома: ".$object['floor_count'];?></p>
      <p><?php echo "Количество комнат: ".$object['room_count'];?></p>
      <p><?php echo "Ипотека: ".$object['hypothecation'];?></p>
      <p><?php echo "Планировка: ".$object['plan'];?></p>
      <i>Агент: <?php echo $object['agent']; ?></i> /
        <i>Дата публикации: <?php echo $object['date_phoned']; ?></i><br /><br />
        <p><?php echo $object['note']; ?></p>
      <p><?php echo "Цена: ".$object['cost']." тыс.руб.";?></p>
    </div>
<?php else: ?>
    <div style="padding:10px; margin-bottom:10px;">
      Объект не найден или не существует
    </div>
<?php endif; ?>


Роуты(все, в таком порядке):

Код:
Route::set('error', 'error/<action>(/<message>)', array('action' => '[0-9]++', 'message' => '.+'))
   ->defaults(array(
      'controller'   => 'error'
   ));

Route::set('object', '<object>/<id>', array('id' => '[0-9]+'))
   ->defaults(array(
      'controller'   => 'object',
      'action'      => 'object',
   ));

Route::set('default', '(<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'controller'   => 'object',
      'action'      => 'objects',
   ));



P.S. Почему широко делает не могу понять, 4 раза переписывал сообщение, ничего не менялось.


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Цитата:
P.S. Почему широко делает не могу понять, 4 раза переписывал сообщение, ничего не менялось.

потому, что в коде переносы не учитываются.

по проблеме: в action_object()
Код:
$object = Model::factory('Object')->get_object($id);

всегда возвращает одну и ту же запись?

$id передается верно? запрос формируется верно(можно посмотреть в Profiler)?

кстати тут:
Код:
DB::query(Database::SELECT, $sql, FALSE)

небольшая ошибка - DB::query имеет всего 2 параметра

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


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

Зарегистрирован: 22 июл 2013, 10:30
Сообщения: 10
Да, всегда одну и ту же запись, первую.
Смотрел в других мануалах, пробовал по их рецептам:
Код:
$id = Arr::get($_POST, 'id');
Пардон, возвращает всегда первое значение именно этот вариант.
Из местного примера
Код:
$object = Model::factory('Object')->get_object($id);
не работает вообще, пишет "Объект не найден или не существует".


Извиняюсь, а что за профайлер и где это?)
$id вроде передаётся верно, по крайней мере ссылка на "подробнее" создаётся правильная, запросы тоже вроде верно.


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
http://kohanaframework.org/3.3/guide/kohana/profiling

попробуй так:
Код:
public function get_object($id = NULL)
{
     if ($results = DB::select()->from($this->_tableObjects)->where('id', '=', $id)->execute()->as_array())
     {
          var_export($results);
          return array_shift($results);
     }
     
}

public function action_object()
{
     $this->template->content = View::factory('pages/object')->set('object',
          Model::factory('Object')->get_object($this->request->post('id')));
}


вообще слово object лучше не использовать т.к. оно практически стало служебным)

если данный вариант не заработает, то скорее всего проблема на стороне бд

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод статей по ид
СообщениеДобавлено: 30 июл 2013, 09:19 
Не в сети
Новичок

Зарегистрирован: 22 июл 2013, 10:30
Сообщения: 10
Пишет "Объект не найден или не существует"

А что может быть с БД? Пока попробую object заменить на что нибудь другое.


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

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


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

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


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

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