public function actionIndex($param = null) { if (isset($_POST['ReviewAuthor'])) { $this->addNewReview($_POST); } //Общий список отзывов $root = ReviewRubrics::getRoot(new ReviewRubrics()); $model['groups'] = $root->descendants(1)->findAll($root->id); $this->setSEO(Yii::app()->request->requestUri, 'Отзывы'); if (empty($param)) { $model['elements'] = ReviewElements::model()->findAll('`status` = 1 ORDER BY review_data DESC'); } else { //Число - это элемент if (is_numeric($param)) { $model['elements'] = ReviewElements::model()->findAll('`status` = 1 AND id = ' . (int) $param); if (empty($model['elements'])) { throw new CHttpException(404, 'The page can not be found.'); } } else { //Ссылка - это раздел $model['elements'] = ReviewElements::model()->findAll('`status` = 1 AND parent_id in (SELECT id FROM {{review_rubrics}} WHERE url LIKE "' . trim($param) . '")'); } } $this->render('index', array('model' => $model, 'param' => $param)); }
/** * Updates a particular model. * If update is successful, the browser will be redirected to the 'update' page. * @param integer $id the ID of the model to be updated */ public function actionUpdate($id) { $this->breadcrumbs = array('Отзывы' => array('/review/review'), 'Редактировать запись'); $model = $this->loadModel($id); $root = ReviewRubrics::getRoot(new ReviewRubrics()); $catalog = $root->descendants()->findAll($root->id); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); // set attributes from get if (isset($_GET['ReviewElements'])) { $model->attributes = $_GET['ReviewElements']; } if (isset($_POST['ReviewElements'])) { $model->attributes = $_POST['ReviewElements']; if ($model->save()) { $url = isset($_POST['go_to_list']) ? $this->listUrl('index') : $this->itemUrl('update', $model->id); $this->redirect($url); } } $this->render('update', array('model' => $model, 'root' => $root, 'catalog' => $catalog)); }
/** * @param $model - модель таблицы tbl_pages_tabs * Возращает HTML код блока вкладки */ public function getTemplate($model) { $resultHTML = ''; //Шаблоны $template = array(1 => ' %description% %module_value% ', 2 => ' %description% %module_value% '); //Общий шаблон switch ($model->site_module_id) { case 1: //Новости $template = array(1 => ' <div class="spisok"> <main class="all" role="main"> <div class="container"> <h1 class="main-caption mg-bottom-24 caption-big">%title%</h1> %module_value% </div> </main> </div> ', 2 => ' <main class="all" role="main"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="spisok fogr gray-bg"> <main class="all" role="main" style="padding-top:20px;"> <div class="container"> %module_value% </div> </main> </div> '); break; case 6: //Статьи $template = array(1 => ' <div class="spisok"> <main class="all" role="main"> <div class="container"> <h1 class="main-caption mg-bottom-24 caption-big">%title%</h1> %module_value% </div> </main> </div> ', 2 => ' <main class="all" role="main"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="spisok fogr gray-bg"> <main class="all" role="main" style="padding-top:20px;"> <div class="container"> %module_value% </div> </main> </div> '); break; case 16: //Отзывы $template = array(1 => ' <div class="spisok"> <main class="all" role="main"> <div class="container"> <h1 class="main-caption mg-bottom-24 caption-big">%title%</h1> %module_value% </div> </main> </div> ', 2 => ' <main class="all" role="main"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="spisok fogr gray-bg"> <main class="all" role="main" style="padding-top:20px;"> <div class="container"> %module_value% </div> </main> </div> '); break; case 7: //Вопросы-ответы $template = array(1 => ' <div class="spisok"> <main class="all" role="main"> <div class="container faq" style="background: #ffffff;"> <h1 class="main-caption mg-bottom-24 caption-big">%title%</h1> %module_value% </div> </main> </div> ', 2 => ' <main class="all" role="main"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="spisok fogr gray-bg"> <main class="all" role="main" style="padding-top:20px;"> <div class="container faq"> %module_value% </div> </main> </div> '); break; case 10: //Врачи $template = array(1 => ' <style> #carusel20 .carusel-left {background-color: #fff;} #carusel20 .carusel-right {background-color: #fff;} </style> <div class="doctor-slide"> <main role="main" class="all" style="background:#fff"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="gray-bg"> <main role="main" class="all"> <div class="container"> %description% <div id="carusel20_doc" class="owl-carousel owl-theme slider pos-relative mg-top-15"> %module_value% </div> </div> </main> </div> </div> ', 2 => ' <div class="doctor-slide"> <main role="main" class="all"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="news-block gray-bg"> <main role="main" class="all"> <div class="container"> %description% <div id="carusel20_doc" class="owl-carousel owl-theme slider pos-relative mg-top-15"> %module_value% </div> </div> </main> </div> </div> '); break; case 11: //Фотогалерея $template = array(1 => ' <style> #carusel20 .carusel-left {background-color: #fff;} #carusel20 .carusel-right {background-color: #fff;} #carusel20_photo .owl-prev {margin-top:-80px;} #carusel20_photo .owl-next {margin-top:-80px;} </style> <div class="doctor-slide"> <main role="main" class="all" style="background:#fff"> <div class="container"> <h2 class="main-caption mg-bottom-24 caption-big">%title%</h2> </div> </main> <div class="gray-bg"> <main role="main" class="all"> <div class="container"> %description% <div id="carusel20_photo" class="owl-carousel owl-theme slider pos-relative mg-top-15"> %module_value% </div> </div> </main> </div> </div> ', 2 => ' <style> #carusel20_photo .owl-prev {margin-top:-80px;} #carusel20_photo .owl-next {margin-top:-80px;} </style> <div class="doctor-slide"> <main role="main" class="all"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="news-block gray-bg"> <main role="main" class="all"> <div class="container"> %description% <div id="carusel20_photo" class="owl-carousel owl-theme slider pos-relative mg-top-15"> %module_value% </div> </div> </main> </div> </div> '); break; case 12: //До и После $template = array(1 => ' <main role="main" class="all" style="background:#fff"> <div class="container"> <h2 class="main-caption mg-bottom-24 caption-big">%title%</h2> </div> </main> <div class="slide-after mg-bottom-20 mg-top-15"> <main class="all" role="main"> %module_value% </main> </div> ', 2 => ' <div class="news-block gray-bg"> <main role="main" class="all"> <div class="container"> <h2 class="main-caption mg-bottom-24">%title%</h2> </div> </main> <div class="slide-after mg-bottom-20 mg-top-15"> <main class="all" role="main"> %module_value% </main> </div> </div> '); break; } //Получаю темплейт для модуля $template_tmp = $template[$model->template_id]; //Для врачей %module_value% - это карусель, для других вариантов - повторяем темплейт для каждого элемента $module_value_array = array(); $module_count_elements = 0; foreach (explode("|", $model->site_module_value) as $data) { if (empty($data)) { continue; } ++$module_count_elements; $module_value_array[$data] = $data; } //Шаблоны элемента %module_value% switch ($model->site_module_id) { case 1: //Новости $tmp_module_value = ''; foreach ($module_value_array as $value) { if ($modelData = NewsGroup::model()->find('id in (' . $value . ') AND `status` = 1')) { $i = 0; $count = 5; foreach (News::model()->findAll('group_id=' . $modelData->id . ' AND `status` = 1') as $modelElements) { ++$i; if ($i > $count) { continue; } $tmp_module_value .= ' <div class="ot"> <span href="#">' . $modelData->name . ' - ' . date("d.m.Y", strtotime($modelElements->maindate)) . '</span></span><BR> ' . $modelElements->name . ' '; if (!empty($modelElements->brieftext)) { $tmp_module_value .= '<BR>' . $modelElements->brieftext; } $tmp_module_value .= '</div>'; } if ($i > 0) { $tmp_module_value .= '<a class="all-otv" href="/news/' . $modelData->url . '">Все новости</a>'; } } } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 6: //Статьи $tmp_module_value = ''; foreach ($module_value_array as $value) { if ($modelData = ArticleRubrics::model()->find('id in (' . $value . ') AND `status` = 1')) { $i = 0; $count = 5; foreach (ArticleElements::model()->findAll('parent_id=' . $modelData->id . ' AND `status` = 1') as $modelElements) { ++$i; if ($i > $count) { continue; } $tmp_module_value .= ' <div class="review_block"> <span>' . $modelElements->name . ' - ' . date("d.m.Y", strtotime($modelElements->maindate)) . '</span><BR> <p>' . $modelElements->brieftext . '</p> </div>'; } if ($i > 0) { $tmp_module_value .= '<a class="all-otv" style="margin-bottom:20px;" href="' . Yii::app()->request->requestUri . '/' . ($module_count_elements > 1 ? $modelData->url . '/' : '') . 'article">Все статьи</a>'; } } } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 7: //Вопрос-ответ $tmp_module_value = ''; foreach ($module_value_array as $value) { if ($modelData = FaqRubrics::model()->find('id in (' . $value . ') AND `status` = 1')) { $i = 0; $count = 5; foreach (FaqElements::model()->findAll('parent_id=' . $modelData->id . ' AND `status` = 1') as $modelElements) { ++$i; if ($i > $count) { continue; } $modelAuthor = FaqAuthor::model()->findByPk($modelElements->author_id); $tmp_module_value .= ' <article> <div class="question"> <span href="#" style="color:#ed174f; font-size: 16px; font-weight: bold; margin-left: 20px;">' . $modelAuthor->name . '<span> / ' . $modelData->name . ' - ' . date("d.m.Y", strtotime($modelElements->question_data)) . '</span></span> <div class="q_data"> ' . $modelElements->question . ' </div> </div> '; if (!empty($modelElements->answer)) { $tmp_module_value .= '<div class="unswer"><div class="u_data">' . $modelElements->answer . '</div></div>'; } $tmp_module_value .= '</article>'; } if ($i > 0) { $tmp_module_value .= '<a class="all-otv" href="' . Yii::app()->request->requestUri . '/' . ($module_count_elements > 1 ? $modelData->url . '/' : '') . 'faq" style="position:relative; z-index:99999; margin-bottom:20px;">Все ответы</a>'; } } } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 16: //Отзывы $tmp_module_value = ''; foreach ($module_value_array as $value) { if ($modelData = ReviewRubrics::model()->find('id in (' . $value . ') AND `status` = 1')) { $i = 0; $count = 5; foreach (ReviewElements::model()->findAll('parent_id=' . $modelData->id . ' AND `status` = 1') as $modelElements) { ++$i; if ($i > $count) { continue; } $modelAuthor = ReviewAuthor::model()->findByPk($modelElements->author_id); $tmp_module_value .= ' <div class="review_block" style="padding: 10px; margin-bottom: 10px; margin-top:20px;"> <span href="#">' . $modelAuthor->name . '<span> / ' . $modelData->name . ' - ' . date("d.m.Y", strtotime($modelElements->review_data)) . '</span></span><BR> <p>' . $modelElements->review . '</p> </div>'; } if ($i > 0) { $tmp_module_value .= '<a class="all-otv" href="' . Yii::app()->request->requestUri . '/' . ($module_count_elements > 1 ? $modelData->url . '/' : '') . 'review" style="position:relative; z-index:99999; margin-bottom:20px;">Все отзывы</a>'; } } } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 10: //Врачи $tmp_module_value = ''; foreach (DoctorElements::model()->findAll('id in (' . implode(",", $module_value_array) . ')') as $data) { $tmp_module_value .= ' <div class="item"> <div class="doctor"> <figure> ' . (!empty($data->image) ? '<img src="/uploads/filestorage/doctor/elements/medium-' . $data->id . '.' . $data->image . '">' : '') . ' </figure> <h1>' . $data->name . '</h1> <article style="margin-top:10px;" class="text-center"> ' . $data->anonse . ' </article> </div> </div> '; } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 11: //Фотогалерея $tmp_module_value = ''; foreach (PhotoElements::model()->findAll('parent_id in (' . implode(",", $module_value_array) . ')') as $data) { $tmp_module_value .= ' <div class="item"> <div class="doctor"> <figure> ' . (!empty($data->image) ? '<a href="/photo/' . $data->parent->url . '"> <div style="height: 212px; background: url(/uploads/filestorage/photo/elements/medium-' . $data->id . '.' . $data->image . ') 100% 100% no-repeat; background-size: cover;"> </div> </a>' : '') . ' </figure> </div> </div> '; } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 12: //До и После $tmp_module_value = ''; foreach (BeforeAfterRubrics::model()->findAll('id in (' . implode(",", $module_value_array) . ')') as $data) { if ($modelImage = BeforeAfterElements::model()->find('parent_id=' . $data->id . ' ORDER BY on_main DESC')) { //URL $parent_url = array(); if (!empty($data)) { $modelTop = BeforeAfterRubrics::model()->findByPk($data->id); foreach ($modelTop->ancestors()->findAll('level>1') as $dataTop) { $parent_url[] = $dataTop->url; } $parent_url[] = $modelTop->url; } $tmp_module_value .= ' <div class="container"> <a href="/before-after/' . (!empty($parent_url) ? implode("/", $parent_url) : '') . '"><h4>' . $data->name . '</h4></a> <div class="spisok af-line"> <a href="/before-after/' . (!empty($parent_url) ? implode("/", $parent_url) : '') . '"> <div class="after"> <figure> <img src="/uploads/filestorage/beforeafter/elements/medium2-before_' . $modelImage->id . '.' . $modelImage->before_photo . '"> <figcaption> ДО </figcaption> </figure> <figure> <img src="/uploads/filestorage/beforeafter/elements/medium2-after_' . $modelImage->id . '.' . $modelImage->before_photo . '"> <figcaption> ПОСЛЕ </figcaption> </figure> </div> </a> </div> </div> '; } } $resultHTML = $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; case 17: //HTML код $tmp_module_value = ''; foreach (HtmlCode::model()->findAll('id in (' . implode(",", $module_value_array) . ') AND `status`=1') as $data) { $tmp_module_value .= $data->code; } $resultHTML = $template_tmp; $title = ''; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; default: $tmp_module_value = ''; $tabel_name = $this->moduleID[$model->site_module_id]; foreach (Yii::app()->db->createCommand()->select('*')->from($tabel_name)->queryAll() as $data) { if (!isset($data['description']) || empty($data['description'])) { continue; } $tmp_module_value .= $data['description']; } $resultHTML .= $template_tmp; $title = $model->title; $resultHTML = str_replace("%module_value%", $tmp_module_value, $resultHTML); break; } $resultHTML = str_replace("%title%", $title, $resultHTML); $resultHTML = str_replace("%description%", $model->description, $resultHTML); return $resultHTML; }
echo $form->textField($modelAuthor, 'name'); ?> </td> </tr> <tr> <td>Ваш E-mail *:</td> <td><?php echo $form->textField($modelAuthor, 'email'); ?> </td> </tr> <tr> <td>Отзыв:</td> <td> <?php echo $form->dropDownList($modelReview, "parent_id", CHtml::listData(ReviewRubrics::model()->findAll('level>1'), "id", "name")); ?> </td> </tr> <tr> <td>Полный текст сообщения *:</td> <td><?php echo $form->textArea($modelReview, 'review', array('rows' => 6, 'cols' => 50)); ?> </td> </tr> </table> <BR> <div class="form-actions">
<legend><?php echo Yii::t("Bootstrap", "LIST.Review"); ?> </legend> <?php $assetsDir = Yii::app()->basePath; $labels = ReviewElements::model()->attributeLabels(); $this->widget('bootstrap.widgets.TbExtendedGridView', array('id' => 'review-elements-grid', 'template' => "{items}\n{pager}", 'enableHistory' => true, 'htmlOptions' => array('class' => 'content_table'), 'dataProvider' => $provider, 'filter' => $model, 'bulkActions' => array('actionButtons' => $this->bulkRemoveButton(), 'checkBoxColumnConfig' => array('name' => 'id')), 'columns' => array(array('header' => $labels["id"], 'name' => "id"), array('header' => $labels["parent_id"], 'name' => 'parent_id', 'value' => '$data->parent ? $data->parent->name : ""', 'filter' => CHtml::listData(ReviewRubrics::model()->findAll(array('order' => 'name')), 'id', 'name')), array('header' => $labels["author_id"], 'name' => 'author_id', 'value' => '$data->author ? $data->author->name : ""', 'filter' => CHtml::listData(ReviewAuthor::model()->findAll(array('order' => 'name')), 'id', 'name')), array('header' => 'Статус', 'name' => "status", 'type' => 'raw', 'value' => function ($data) { return ' <a href="#" class="on-off-product" data-id="' . $data->id . '" data-status="' . $data->status . '"> <div style="margin-left:20px; width: 13px; height: 13px; border-radius: 3px; background:' . ($data->status == 1 ? 'green' : 'red') . '"></div> </a> '; }, 'filter' => ''), array('header' => $labels["review_data"], 'name' => "review_data"), array('class' => 'bootstrap.widgets.TbButtonColumn', 'template' => '{update} {delete}', 'buttons' => array('update' => array('label' => yii::t('Bootstrap', 'PHRASE.UPDATE'), 'url' => 'CHtml::normalizeUrl(array("update", "id" => $data->id))', 'options' => array()), 'delete' => array('label' => yii::t('Bootstrap', 'PHRASE.DELETE'), 'options' => array())), 'htmlOptions' => array('style' => 'white-space: nowrap'))))); ?> <div class="buttons"> <a class="btn btn-primary" href="/admin/<?php echo Yii::app()->controller->module->id; ?> /<?php echo Yii::app()->controller->id; ?> /create" style="margin-top:14px; float:left; margin-left:15px"> Добавить новый отзыв</a> </div> <script> //Меняем статус $(document).on('click', '.on-off-product', function(){
/** * Получить количество элементов в узле */ public static function getCountTree($left_key, $right_key) { $model = Yii::app()->db->createCommand()->select('count(id) as count')->from(ReviewRubrics::model()->tableName())->where('left_key>=' . (int) $left_key . ' AND right_key<=' . (int) $right_key . '')->queryRow(); $result = current($model) - 1; //вычитае из резуьтата сам узел return $result; }
/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer the ID of the model to be loaded */ public function loadModel($id) { $model = ReviewRubrics::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
</legend> <?php $assetsDir = Yii::app()->basePath; $labels = ReviewRubrics::model()->attributeLabels(); $this->widget('bootstrap.widgets.TbExtendedGridView', array('id' => 'review-group-grid', 'template' => "{items}\n{pager}", 'enableHistory' => true, 'dataProvider' => $provider, 'filter' => $model, 'bulkActions' => array('actionButtons' => $this->bulkRemoveButton(), 'checkBoxColumnConfig' => array('name' => 'id')), 'columns' => array(array('header' => $labels["id"], 'name' => "id"), array('header' => $labels["name"], 'name' => "name"), array('header' => 'url', 'name' => "url", 'type' => 'raw', 'value' => function ($data) { return $data->url; /* return ' <a href="'.$data->url.'" target="_blank"> '.$data->url.' </a> '; */ }, 'filter' => ''), array('header' => 'Позиций', 'type' => 'raw', 'value' => function ($data) { $count = ReviewRubrics::getCountTree($data->left_key, $data->right_key); return ' <a href="/admin/review/reviewrubrics/index?id=' . $data->id . '" target="_blank"> <b>' . $count . '</b> </a> '; }, 'filter' => ''), array('header' => 'Статус', 'name' => "status", 'type' => 'raw', 'value' => function ($data) { return ' <a href="#" class="on-off-product" data-id="' . $data->id . '" data-status="' . $data->status . '"> <div style="margin-left:20px; width: 13px; height: 13px; border-radius: 3px; background:' . ($data->status == 1 ? 'green' : 'red') . '"></div> </a> '; }, 'filter' => ''), array('class' => 'bootstrap.widgets.TbButtonColumn', 'template' => '{move_up} {move_down} {update} {delete}', 'buttons' => array('move_up' => array('label' => '', 'visible' => '($row==0)?false:true', 'url' => '"/admin/review/reviewrubrics/move?id=$data->id&move=1"', 'options' => array('class' => 'icon-arrow-up', 'data-original-title' => 'Переместить выше')), 'move_down' => array('label' => '', 'visible' => '(($row+1)==ReviewRubrics::model()->count("level=$data->level"))?false:true', 'url' => '"/admin/review/reviewrubrics/move?id=$data->id&move=2"', 'options' => array('class' => 'icon-arrow-down', 'data-original-title' => 'Переместить ниже')), 'update' => array('label' => yii::t('Bootstrap', 'PHRASE.UPDATE'), 'url' => 'CHtml::normalizeUrl(array("update", "id" => $data->id))', 'options' => array()), 'delete' => array('label' => yii::t('Bootstrap', 'PHRASE.DELETE'), 'options' => array())), 'htmlOptions' => array('style' => 'white-space: nowrap'))))); ?>