예제 #1
0
 /**
  * Создает DataProvider на основе переданных данных
  * @param $params - параметры
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $this->scenario = 'search';
     // Устанавливаем сценарий поиска
     $query = Document::find();
     $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => $this::COUNT], 'sort' => array('defaultOrder' => ['created_at' => SORT_DESC])]);
     $this->load($params);
     // Если валидация не пройдена, то ничего не выводить
     if (!$this->validate()) {
         $query->where('0=1');
         return $dataProvider;
     }
     // Фильтрация
     $query->andFilterWhere(['id' => $this->id, 'position' => $this->position, 'status' => $this->status, 'is_folder' => $this->is_folder, 'parent_id' => $this->parent_id, 'template_id' => $this->template_id, 'updated_at' => $this->updated_at, 'created_by' => $this->created_by, 'updated_by' => $this->updated_by]);
     if ($this->created_at) {
         $date = new \DateTime($this->created_at);
         $this->created_at = $date->format('Y-m-d');
     }
     $query->andFilterWhere(['like', 'name', $this->name])->andFilterWhere(['like', 'alias', $this->alias])->andFilterWhere(['like', 'title', $this->title])->andFilterWhere(['like', 'meta_keywords', $this->meta_keywords])->andFilterWhere(['like', 'meta_description', $this->meta_description])->andFilterWhere(['like', 'annotation', $this->annotation])->andFilterWhere(['like', 'content', $this->content])->andFilterWhere(['like', 'image', $this->image])->andFilterWhere(['like', 'created_at', $this->created_at]);
     if ($this->id_from) {
         $query->andFilterWhere(['>=', 'id', $this->id_from]);
     }
     if ($this->id_till) {
         $query->andFilterWhere(['<=', 'id', $this->id_till]);
     }
     if ($this->position_from) {
         $query->andFilterWhere(['>=', 'position', $this->position_from]);
     }
     if ($this->position_till) {
         $query->andFilterWhere(['<=', 'position', $this->position_till]);
     }
     if ($this->created_at_from) {
         $date_from = new \DateTime($this->created_at_from);
         $query->andFilterWhere(['>=', 'created_at', $date_from->format('Y-m-d')]);
     }
     if ($this->created_at_till) {
         $date_till = new \DateTime($this->created_at_till);
         $query->andFilterWhere(['<=', 'created_at', $date_till->format('Y-m-d')]);
     }
     if ($this->updated_at_from) {
         $date_from = new \DateTime($this->updated_at_from);
         $query->andFilterWhere(['>=', 'updated_at', $date_from->format('Y-m-d')]);
     }
     if ($this->updated_at_till) {
         $date_till = new \DateTime($this->updated_at_till);
         $query->andFilterWhere(['<=', 'updated_at', $date_till->format('Y-m-d')]);
     }
     return $dataProvider;
 }
예제 #2
0
        <div class="col-lg-6">
            <?php 
echo $form->field($model, 'alias', ['addon' => ['append' => ['content' => ButtonDropdown::widget(['label' => 'Сформировать', 'dropdown' => ['items' => [['label' => Yii::t('document', 'Из названия'), 'url' => '#', 'options' => ['class' => 'translate-name']], ['label' => Yii::t('document', 'Из заголовка'), 'url' => '#', 'options' => ['class' => 'translate-title']]]], 'options' => ['class' => 'btn-default']]), 'asButton' => true], 'groupOptions' => ['id' => 'alias-btn']]]);
?>
        </div>
        <div class="col-lg-6">
            <?php 
echo $form->field($model, 'status')->dropDownList(Document::getStatusArray());
?>
        </div>
    </div>

    <div class="row">
        <div class="col-lg-6">
            <?php 
echo $form->field($model, 'parent_id')->widget(Select2::classname(), ['data' => Document::getAll(), 'options' => ['placeholder' => '', 'class' => 'parent_id'], 'pluginOptions' => ['allowClear' => true]]);
?>
        </div>
        <div class="col-lg-6">
            <?php 
echo $form->field($model, 'template_id')->widget(Select2::classname(), ['data' => Template::getAll(), 'options' => ['placeholder' => '', 'class' => 'template_id'], 'pluginOptions' => ['allowClear' => true]]);
?>
        </div>
    </div>

    <div class="row">
        <div class="col-lg-6">
            <?php 
echo $form->field($model, 'meta_keywords')->textarea(['rows' => 2]);
?>
        </div>
예제 #3
0
<?php

/**
 * @package   yii2-document
 * @author    Yuri Shekhovtsov <*****@*****.**>
 * @copyright Copyright &copy; Yuri Shekhovtsov, lowbase.ru, 2015 - 2016
 * @version   1.0.0
 */
use lowbase\document\components\TreeWidget;
use lowbase\document\models\Document;
use yii\bootstrap\Modal;
/* @var $this yii\web\View */
/* @var $model app\modules\document\models\DocumentSearch */
/* @var $form yii\widgets\ActiveForm */
Modal::begin(['header' => '<h1 class="text-center">' . Yii::t('document', 'Дерево документов') . '</h1>', 'toggleButton' => false, 'id' => 'tree', 'options' => ['tabindex' => false]]);
?>

<div class="lb-document-module-tree">
    <?php 
echo TreeWidget::widget(['data' => Document::find()->orderBy(['position' => SORT_ASC])->all()]);
?>
</div>

<?php 
Modal::end();
예제 #4
0
 /**
  * Пометка или снятие документа как папки
  * @param $id - ID документа
  * @param bool $child_delete - дочерние документы удаляются?
  * @return bool
  */
 public static function folder($id, $child_delete = false)
 {
     $model = Document::findOne($id);
     $db = self::getDb();
     // Помечаем документ как папку если имеются дочерние документы
     if ($model && $model->children && !$model->is_folder) {
         $db->createCommand()->update('lb_document', ['is_folder' => 1], ['id' => $model->id])->execute();
     }
     // Помечаем папку как документ если нет дочерних документов или
     // имеется один дочерний докуемнт, который будет удален
     if ($model && !$model->children && $model->is_folder || $model && count($model->children) === 1 && $model->is_folder && $child_delete) {
         $db->createCommand()->update('lb_document', ['is_folder' => 0], ['id' => $model->id])->execute();
     }
 }
예제 #5
0
 /**
  * Добавление значения мультиполя
  */
 public function actionField()
 {
     $document_id = Yii::$app->request->post('document_id');
     $model = $document_id ? Document::findOne($document_id) : new Document();
     $field_id = Yii::$app->request->post('field_id');
     $field = Field::findOne($field_id);
     if (!$field) {
         return false;
     }
     $data_id = Yii::$app->request->post('data_id');
     $data_id = 'new_multi_' . $data_id;
     // 0 перед id нового поля свидетельствует о добавлении мультизначения
     $data = ['value' => '', 'position' => ''];
     return $this->renderAjax('@vendor/lowbase/yii2-document/views/document/_field', ['model' => $model, 'field' => $field, 'field_id' => $field_id, 'data' => $data, 'data_id' => $data_id]);
 }
예제 #6
0
 /**
  * Документ
  * @return \yii\db\ActiveQuery
  */
 public function getDocument()
 {
     return $this->hasOne(Document::className(), ['id' => 'document_id']);
 }
예제 #7
0
 /**
  * Документы с текущим шаблоном
  * @return \yii\db\ActiveQuery
  */
 public function getDocuments()
 {
     return $this->hasMany(Document::className(), ['template_id' => 'id']);
 }
예제 #8
0
파일: view.php 프로젝트: lowbase/yii2-cms
DocumentAsset::register($this);
?>
<div class="document-view">

    <div class="row">
        <div class="col-lg-12">
            <h1><?php 
echo Html::encode($this->title);
?>
</h1>
        </div>
    </div>

    <p>
        <?php 
echo Html::a('<i class="glyphicon glyphicon-pencil"></i> ' . Yii::t('document', 'Редактировать'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']);
?>
        <?php 
echo Html::a('<i class="glyphicon glyphicon-trash"></i> ' . Yii::t('document', 'Удалить'), ['delete', 'id' => $model->id], ['class' => 'btn btn-danger', 'data' => ['confirm' => Yii::t('document', 'Вы уверены, что хотите удалить документ?'), 'method' => 'post']]);
?>
        <?php 
echo Html::a('<i class="glyphicon glyphicon-menu-left"></i> ' . Yii::t('document', 'Отмена'), ['index'], ['class' => 'btn btn-default']);
?>
    </p>

    <?php 
echo DetailView::widget(['model' => $model, 'attributes' => ['id', 'name', 'alias', 'title', 'meta_keywords:ntext', 'meta_description:ntext', 'annotation:ntext', 'content:ntext', ['attribute' => 'image', 'format' => 'raw', 'value' => $model->image ? '<img src="' . $model->image . '" class="thumbnail lb-document-module-thumb">' : null], ['attribute' => 'status', 'value' => Document::getStatusArray()[$model->status]], ['attribute' => 'is_folder', 'value' => $model->is_folder ? Yii::t('document', 'Да') : Yii::t('document', 'Нет')], ['attribute' => 'parent_id', 'format' => 'raw', 'value' => $model->parent_id && $model->parent ? Html::a($model->parent->name, ['document/view', 'id' => $model->parent_id]) : null], ['attribute' => 'template_id', 'format' => 'raw', 'value' => $model->template_id && $model->template ? Html::a($model->template->name, ['template/view', 'id' => $model->template_id]) : null], ['attribute' => 'created_at', 'format' => ['date', 'dd.MM.Y HH:mm:ss']], ['attribute' => 'updated_at', 'format' => ['date', 'dd.MM.Y HH:mm:ss']], 'position', ['attribute' => 'created_by', 'format' => 'raw', 'value' => isset($model->created) ? Html::a($model->created->first_name . " " . $model->created->last_name, ['/admin-user/user/view', 'id' => $model->created_by]) : $model->created_by], 'updated_by', ['attribute' => Yii::t('document', 'Просмотры'), 'format' => 'raw', 'value' => $views], ['attribute' => Yii::t('document', 'Лайки'), 'format' => 'raw', 'value' => $likes]]]);
?>

</div>
예제 #9
0
    switch ($model->status) {
        case Document::STATUS_BLOCKED:
            return '<span class="label label-danger">
                            <i class="glyphicon glyphicon-lock"></i> ' . Document::getStatusArray()[Document::STATUS_BLOCKED] . '</span>';
            break;
        case Document::STATUS_WAIT:
            return '<span class="label label-warning">
                            <i class="glyphicon glyphicon-hourglass"></i> ' . Document::getStatusArray()[Document::STATUS_WAIT] . '</span>';
            break;
        case Document::STATUS_ACTIVE:
            return '<span class="label label-success">
                            <i class="glyphicon glyphicon-ok"></i> ' . Document::getStatusArray()[Document::STATUS_ACTIVE] . '</span>';
            break;
    }
    return false;
}, 'filter' => Document::getStatusArray()], ['template' => '{view} {update} {delete}', 'class' => 'kartik\\grid\\ActionColumn'], ['class' => 'kartik\\grid\\CheckboxColumn', 'headerOptions' => ['class' => 'kartik-sheet-style']]];
echo GridView::widget(['layout' => "{items}\n{summary}\n{pager}", 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => $gridColumns, 'containerOptions' => ['style' => 'overflow: auto'], 'headerRowOptions' => ['class' => 'kartik-sheet-style'], 'filterRowOptions' => ['class' => 'kartik-sheet-style'], 'pjax' => false, 'panel' => ['heading' => '<i class="glyphicon glyphicon-book"></i> ' . Yii::t('document', Yii::t('document', 'Документы')), 'type' => GridView::TYPE_PRIMARY, 'before' => Html::a('<span class="glyphicon glyphicon-plus"></span> ' . Yii::t('document', 'Добавить'), ['document/create'], ['class' => 'btn btn-success']) . ' ' . Html::button('<span class="glyphicon glyphicon-search"></span> ' . Yii::t('document', 'Поиск'), ['class' => 'filter btn btn-default', 'data-toggle' => 'modal', 'data-target' => '#filter']) . ' ' . Html::button('<span class="glyphicon glyphicon-tree-deciduous"></span> ' . Yii::t('document', 'Дерево'), ['class' => 'filter btn btn-default', 'data-toggle' => 'modal', 'data-target' => '#tree']), 'after' => "<div class='text-right'><b>" . Yii::t('document', 'Выбранные') . ":</b> " . Html::button('<span class="glyphicon glyphicon-eye-open"></span> ' . Yii::t('document', 'Опубликовать'), ['class' => 'btn btn-default open-all']) . " " . Html::button('<span class="glyphicon glyphicon-eye-close"></span> ' . Yii::t('document', 'Скрыть'), ['class' => 'btn btn-default close-all']) . " " . Html::button('<span class="glyphicon glyphicon-trash"></span> ' . Yii::t('document', 'Удалить'), ['class' => 'btn btn-danger delete-all']) . "</div>"], 'export' => ['fontAwesome' => true], 'bordered' => true, 'striped' => true, 'condensed' => true, 'persistResize' => false, 'hover' => true, 'responsive' => true]);
?>
</div>

    <?php 
$this->registerJs('
            $(".delete-all").click(function(){
            var keys = $(".grid-view").yiiGridView("getSelectedRows");
            $.ajax({
                url: "' . Url::to(['document/multidelete']) . '",
                type:"POST",
                data:{keys: keys},
                success: function(data){
                    location.reload();
                }
예제 #10
0
        // Строка
        case 9:
            // Регулярное выражение
            echo Html::activeInput('text', $model, $attr_value, ['class' => 'form-control', 'id' => $attr_id]);
            break;
        case 3:
            // Флажок
            echo Html::activeCheckbox($model, $attr_value, ['class' => 'form-control', 'id' => $attr_id, 'label' => null]);
            break;
        case 5:
            // Текст
            echo Html::activeTextarea($model, $attr_value, ['class' => 'form-control', 'id' => $attr_id]);
            break;
        case 6:
            // Список (дочерние документы
            echo Select2::widget(['model' => $model, 'attribute' => $attr_value, 'data' => Document::getAll($field['param']), 'options' => ['id' => $attr_id, 'placeholder' => ''], 'pluginOptions' => ['allowClear' => true, 'class' => 'form-control', 'id' => $attr_id]]);
            break;
        case 8:
            // Файл (выбор с сервера)
            echo InputFile::widget(['controller' => 'elfinder', 'template' => '<div class="input-group">{input}<span class="input-group-btn">{button}</span></div>', 'options' => ['class' => 'form-control', 'id' => $attr_id], 'buttonOptions' => ['class' => 'btn btn-default'], 'buttonName' => Yii::t('document', 'Выбрать файл'), 'multiple' => false, 'name' => 'Document[fields][' . $field_id . '][data][' . $data_id . '][value]', 'value' => isset($model->fields[$field_id]['data'][$data_id]['value']) ? $model->fields[$field_id]['data'][$data_id]['value'] : null]);
            break;
        case 7:
            // Дата
            echo DatePicker::widget(['model' => $model, 'attribute' => $attr_value, 'options' => ['id' => $attr_id, 'placeholder' => ''], 'pluginOptions' => ['format' => 'dd.mm.yyyy', 'class' => 'form-control', 'id' => $attr_id]]);
            break;
    }
}
?>
            </div>
            <div class="help-block">
                <?php