глюк в CPagination

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

глюк в CPagination

Сообщение desc »

в базе 4 записи, ставлю pageSize=2 в паджинаторе выводит 3 ссылки на 3 страницы, должно на две
вот код

Код: Выделить всё

$count=$connection->createCommand("SELECT COUNT(*) FROM post")->queryScalar();
            $sql = "SELECT id, title, link, short FROM post WHERE status=1 ORDER BY datetime DESC";

        $post=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'pagination'=>array(
                'pageSize'=>2,
            ),
        ));
        $news = $post->getData();
        $pages=new CPagination($count);
        $pages->pageSize=2;
    
вьюха

Код: Выделить всё

<?$this->widget('CLinkPager', array(
    'pages' => $pages,
    'header'=>'',
    'maxButtonCount'=>10,
    'firstPageLabel' => '<<', 
    'prevPageLabel' => '<',
    'nextPageLabel' => '>',
    'lastPageLabel' => '<<',
    //'cssFile'=>false
))?>
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: глюк в CPagination

Сообщение lancedevnull »

"SELECT COUNT(*) FROM post ГДЕ СТАТУС=1"
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: глюк в CPagination

Сообщение desc »

аааа позор моим сединам, как же удалить тему?!
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: глюк в CPagination

Сообщение desc »

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

Код: Выделить всё

    public function actionIndex()
    {
        $connection=Yii::app()->db;
        //  по категориям
        if(isset($_GET['link']))
        {
            $count=$connection->createCommand("SELECT COUNT(*) FROM post WHERE cat_link='".$_GET['link']."' and status=1")->queryScalar();
            $sql = "SELECT id, title, link, short FROM post WHERE cat_link='".$_GET['link']."' AND status=1 ORDER BY datetime DESC";
        }
        //  по тегам
        if(isset($_GET['tag']))
        {
            $tags = Tags::model()->findByAttributes(array('link' => $_GET['tag'])); 
            if($tags == null) 
                throw new CHttpException(404, 'Записи с таким тегом не найдены');

            $count=$connection->createCommand("SELECT COUNT(*) FROM post WHERE tags LIKE '%".mysql_escape_string($tags->name)."%' and status=1")->queryScalar();
            $sql = "SELECT id, title, link, short FROM post WHERE tags and status=1 LIKE '%".mysql_escape_string($tags->name)."%' AND status=1";                
        }
        if(!isset($_GET['tag']) and !isset($_GET['link']))
        {
            $count=$connection->createCommand("SELECT COUNT(*) FROM post WHERE status=1")->queryScalar();
            $sql = "SELECT id, title, link, short FROM post WHERE status=1 ORDER BY datetime DESC";
        }

        $post=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'pagination'=>array(
                'pageSize'=>2,
            ),
        ));
        $news = $post->getData();

        $pages=new CPagination($count);
        $pages->pageSize=2;
    
        $this->render('index', array('post'=>$news, 'pages'=>$pages));
    }
 
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: глюк в CPagination

Сообщение lancedevnull »

1. если от ар отказываться то лучше и теги пилить через дао
2. параметры в запрос лучше биндить, тогда экранировать ненужно
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: глюк в CPagination

Сообщение desc »

2. параметры в запрос лучше биндить, тогда экранировать ненужно
это как можно не большой пример?
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: глюк в CPagination

Сообщение lancedevnull »

Привязка параметров
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: глюк в CPagination

Сообщение desc »

в том и проблема что я не знаю и там нет примеров как привязать параметры в моем случае
например делаю так
$count=$connection->createCommand("SELECT COUNT(*) FROM post WHERE cat_link=:cat_link and status=1")->queryScalar()->bindValue(':cat_link', $link);

не работает
CDbCommand не удалось исполнить SQL-запрос: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound. The SQL statement executed was: SELECT COUNT(*) FROM post WHERE cat_link=:cat_link and status=1
$connection->bindParam(':cat_link', $link, PDO::PARAM_STR);
так $post=new CSqlDataProvider($sql, array(
'params' => array(':cat_link' => $link), тоже не работает

и не работает именно в запросе ->queryScalar(); в других работает
pashalit85
Сообщения: 22
Зарегистрирован: 2011.05.30, 17:12

Re: глюк в CPagination

Сообщение pashalit85 »

а так пробовал ->queryScalar(array(':cat_link' => $link))
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: глюк в CPagination

Сообщение lancedevnull »

desc писал(а):$connection->bindParam
не к соединению а к команде createCommand вернет команду
Аватара пользователя
desc
Сообщения: 58
Зарегистрирован: 2014.02.27, 18:28

Re: глюк в CPagination

Сообщение desc »

спасибо
Ответить