/** * 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) { $model = $this->loadModel($id); $root = ArticleRubrics::getRoot(new ArticleRubrics()); $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['ArticleElements'])) { $model->attributes = $_GET['ArticleElements']; } if (isset($_POST['ArticleElements'])) { $model->attributes = $_POST['ArticleElements']; $model->imagefile = CUploadedFile::getInstance($model, 'imagefile'); if (isset($model->imagefile)) { $ext = pathinfo($model->imagefile); $model->image = $ext['extension']; } if ($model->save()) { if (isset($model->imagefile) && ($modelSettings = SiteModuleSettings::model()->find('site_module_id = 6'))) { $filename = $model->id . '.' . $model->image; $filepatch = '/../uploads/filestorage/article/elements/'; $model->imagefile->saveAs(YiiBase::getPathOfAlias('webroot') . $filepatch . $filename); //Обработка изображения SiteModuleSettings::model()->chgImgModel($modelSettings, 'GD', 2, $model->id); } $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; }
/ <?php echo $data->url; ?> "> <?php echo $data->name; ?> ( <?php echo ArticleElements::model()->getCountElements($data->id); ?> )</a></b> <ul> <?php $tmp_model = ArticleRubrics::model()->findByPk($data->id); foreach ($tmp_model->descendants()->findAll() as $dataSubRubrics) { ?> <li><a href="<?php echo Yii::app()->request->requestUri; ?> /<?php echo $dataSubRubrics->url; ?> "><?php echo $dataSubRubrics->name; ?> (<?php echo ArticleElements::model()->getCountElements($dataSubRubrics->id); ?>
$url_img = '/../uploads/filestorage/article/rubrics/admin-' . $dataProvider->id . '.' . $dataProvider->image; } return '<img src="' . $url_img . '" style="width:80px" />'; }, 'filter' => ''), array('header' => $labels["name"], 'type' => 'raw', 'value' => function ($data) { $return = ''; //Если это level = 2 - вывожу выделеным черным шрифтом if ($data->level == 2) { $return = '<b>' . $data->name . '</b>'; } else { //подчиненная категория - вывожу со смещением относительно родительской $repeat_prefix = $data->level == 3 ? $data->level : $data->level + 1; $return = str_repeat('  ', $repeat_prefix) . $data->name; } return $return; }, 'filter' => ''), array('header' => $labels["url"], 'name' => "url"), array('header' => 'Позиций', 'type' => 'raw', 'value' => function ($data) { $count = ArticleRubrics::getCountElement($data->id); return ' <a href="/admin/article/articleelements/index?ArticleElements[parent_id]=' . $data->id . '"> <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 || !$data->prev()->find() )?false:true', 'url' => '"/admin/' . Yii::app()->controller->module->id . '/' . Yii::app()->controller->id . '/move?id=$data->id&move=1"', 'options' => array('class' => 'icon-arrow-up', 'data-original-title' => 'Переместить выше')), 'move_down' => array('label' => '', 'visible' => '(($row+2)==ArticleRubrics::model()->count() || !$data->next()->find())?false:true', 'url' => '"/admin/' . Yii::app()->controller->module->id . '/' . Yii::app()->controller->id . '/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'))))); ?> <div class="buttons"> <a class="btn btn-primary" href="/admin/<?php
/** * Получить количество элементов в узле */ public static function getCountTree($left_key, $right_key) { $model = Yii::app()->db->createCommand()->select('count(id) as count')->from(ArticleRubrics::model()->tableName())->where('left_key>=' . (int) $left_key . ' AND right_key<=' . (int) $right_key . '')->queryRow(); $result = current($model) - 1; //вычитае из резуьтата сам узел return $result; }
public function actionElement($param) { $paramArr = explode("/", $param); $paramArr = array_pop($paramArr); $paramArr = strtolower($paramArr); if (is_numeric($paramArr)) { $modelElements = ArticleElements::model()->findByPk($paramArr); $model = ArticleRubrics::model()->findByPk($modelElements->parent_id); if (!$model) { throw new CHttpException(404, 'The page can not be found.'); } $this->setSEO(Yii::app()->request->requestUri, 'Статьи', $model); $pageArray = array(); $i = 0; foreach ($model->ancestors()->findAll() as $data) { if ($data->level == 1) { continue; } $pageArray[$i]['url'] = $data->url; $pageArray[$i]['name'] = $data->name; ++$i; } $pageArray[$i]['url'] = $model->url; $pageArray[$i]['name'] = $model->name; if (count($pageArray) > 1) { rsort($pageArray); } $model = $model->descendants(1)->findAll($model->id); $render = 'view'; } else { if ($modelPage = Pages::model()->find('url LIKE "' . $param . '"')) { if ($modelTabs = PagesTabs::model()->find('pages_id=' . $modelPage->id)) { $module_id = array_diff(explode("|", $modelTabs->site_module_value), array('')); if ($tmpParam = ArticleRubrics::model()->find('id in (' . current($module_id) . ') AND `status` = 1')) { $paramArr = $tmpParam->url; } } } $model = ArticleRubrics::model()->find('url LIKE "' . $paramArr . '"'); if (!$model) { throw new CHttpException(404, 'The page can not be found.'); } $this->setSEO(Yii::app()->request->requestUri, 'Статьи', $model); $pageArray = array(); $pageArray[0]['name'] = ' / ' . $model->name; $pageArray[0]['url'] = null; $i = 1; foreach ($model->ancestors()->findAll('level>1') as $data) { $pageArray[$i]['name'] = ' / ' . $data->name; $pageArray[$i]['url'] = 'article/' . $data->url; ++$i; } rsort($pageArray); if (count($pageArray) > 1) { rsort($pageArray); } $modelElements = ArticleElements::model()->findAll('parent_id = ' . $model->id . ' AND `status`=1 ORDER BY `primary` DESC'); $model = $model->descendants(1)->findAll($model->id); $render = 'index'; } $this->render($render, array('model' => $model, 'modelElements' => $modelElements, 'pageArray' => $pageArray)); }
/** * 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 = ArticleRubrics::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }