Yii
- 4 ответа
- 0 вопросов
4
Вклад в тег
$dataProvider = new ActiveDataProvider([
'query' => Post::find()->andWhere(['category_id' => $model->id]),
'pagination' => [
// Размер выводимых элементов на страницу.
// Беру из настроек своего модуля blog
'pageSize' => Yii::$app->getModule('blog')->postPerPage,
// Размер эл-тов на страницу по умолчанию. Зачем нужен - поясню после кода
'defaultPageSize' => Yii::$app->getModule('blog')->postPerPage,
// Имя параметра, содержащего номер текущей страницы.
// (если Ваш отличается от дефолтного 'page')
'pageParam' => 'pageNum',
// Так подавляется ссылка на первую страницу вида /category-name-х/1/
// Вместо неё выведется /category-name-х/
'forcePageParam' => false,
]
]);
Так же требуется url первой страницы менять с такого mysite.ru/controllerName?page=1&per-page=2 на такой mysite.ru/controllerName
//...
// Category with pager
[
'pattern' => '<alias:[\w\-]+>/<page:\d+>',
'route' => 'blog/category/index',
'suffix' => '/'
],
//...
'pattern' => '<alias:[\w\-]+>/<pageNum:\d+>'
$query = Post::find()->andWhere(['category_id' => $model->id]);
$countQuery = clone $query;
$pages = new Pagination([
'totalCount' => $countQuery->count(),
'pageSize' => Yii::$app->getModule('blog')->postPerPage,
'defaultPageSize' => Yii::$app->getModule('blog')->postPerPage,
'pageParam' => 'pageNum',
'forcePageParam' => false,
]);
$postModels = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('index', [
'postModels' => $postModels,
'pages' => $pages,
]);
echo LinkPager::widget([
'pagination' => $pages,
// Отключаю ссылку "Следующий"
'nextPageLabel' => false,
// Отключаю ссылку "Предыдущий"
'prevPageLabel' => false,
]);
public function rules()
{
return [
[['date'], 'required'],
[['date'], 'safe'],
[['date'],
'filter',
'filter' => function($value){
return \Yii::$app->formatter->asDate($value, 'yyyy-MM-dd');
}
],
[
['date'],
'date',
'format' => 'yyyy-MM-dd'
],
[
['date'],
'in',
'range' => function ($model, $attribute) {
$start = \Yii::$app->formatter->asTimestamp(!empty($model->oldAttributes[$attribute]) ?
$model->oldAttributes[$attribute] :
$this->$attribute);
$start += 24 * 60 * 60;
$stop = \Yii::$app->formatter->asTimestamp($model->relatedModel->end_date);
$dates = [];
while ($start <= $stop) {
$dates[] = \Yii::$app->formatter->asDate($start, 'MM/dd/yyyy');
$start += (24 * 60 * 60);
}
return $dates;
},
'on' => [
self::SCENARIO_DEFAULT,
],
'skipOnEmpty' => false,
'skipOnError' => false
],
];
}
<?php
$form = ActiveForm::begin();
$model->date = \Yii::$app->formatter->asDate($model->date, 'MM/dd/yyyy');
?>
<?= $form->field($model, 'date')
->label('Date')
->widget(DatePicker::className(), [
'dateFormat' => 'MM/dd/yyyy',
])
->textInput([
'class' => 'form-control',
]);
?>
/**
* $inCategory
* @var boolean false - get posts from alien categories, true - from this category
*/
$postIds = $query
->select('id')
->from(Yii::$app->getModule('blog')->getParam('sphinxRtIndex'))
->match(new Expression(':match',
[
'match' => implode(' | ', $search)
]
))
->andWhere('id != :id', [':id' => $this->postModel->id])
->andWhere('category_id' . ($this->inCategory? '=' : '!=') . ':category_id',
[
':category_id' => $this->postModel->category_id
]
)
->limit($this->limit)
->all();
protected function replace() {
$params = [];
$sql = \Yii::$app->sphinx->getQueryBuilder()
->replace(
$this->rtIndex,
$this->getColumns(),
$params
);
return \Yii::$app->sphinx->createCommand($sql, $params)->execute();
}
/**
* $this->getColumns() возвращает массив вида:
* ['title' => 'John Doe', 'text' => 'I knew John well...']
*
* $this->rtIndex - содержит значение имени Realtime индекса
*/