Marketus Posted April 24, 2017 Report Share Posted April 24, 2017 Добрый день! Возникла задача: сделать длинные кастомные страницы аля "разделы". Проблема в том что структура этих страниц по типу "лендосов" длинный ковер из разных блоков. Так вот редактировать во одном окне редактора всю страницу очень не удобно. Хотелось бы как то разделить их по блочно.Например добавил блок "о компании" потом "партнеры" и так далее, а вывод идет на одной странице. Подскажите как логичней это выстроить? Quote Link to post Share on other sites
Marketus Posted April 24, 2017 Author Report Share Posted April 24, 2017 Подозреваю, что нужно расширить стандартные страницы и сделать их с подстраницами... Кто поможет? Quote Link to post Share on other sites
mishanya Posted April 24, 2017 Report Share Posted April 24, 2017 (edited) можно так в цыкле выводить на главной содержимое всех видимых страниц {foreach $pages as $p} {if $p->visible} {$p->body} {/if} {/foreach} Edited April 24, 2017 by mishanya Quote Link to post Share on other sites
Marketus Posted April 24, 2017 Author Report Share Posted April 24, 2017 можно так в цыкле выводить на главной содержимое всех видимых страниц {foreach $pages as $p} {if $p->visible} {$p->body} {/if} {/foreach} Мне не только на главной Quote Link to post Share on other sites
mishanya Posted April 24, 2017 Report Share Posted April 24, 2017 делаете несколько разделов - меню по инструкции http://forum.simplacms.ru/topic/4310-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B5%D0%BD%D1%8E/ дальше можете в каждом меню добавлять несколько страниц-разделов и выводить {foreach $pages as $p} {if $p->visible && $p->menu_id==1} {$p->body} {/if} {/foreach} где menu_id==1 айди каждого из ваших разделов (меню) как бесплатный вариант Quote Link to post Share on other sites
Marketus Posted April 24, 2017 Author Report Share Posted April 24, 2017 Сделал! Расширил симплу - сделал под страницы (parent_id) Страницыhttps://yadi.sk/i/4jusZLAV3HJVrS Страницаhttps://yadi.sk/i/wTErH-6z3HJVu8 1 В сайтмап не выводит подстраницы2 Автоматически сортирует в списке страниц под родителя + визуально показывает3 При прямом переходе на внутреннюю выдает "страница не найдена" Я подозреваю что нахардкодил где то, потому выложу инструкцию чуть позже.Хочу еще в списке страниц сделать фильтр по родительским страницам. Quote Link to post Share on other sites
Solution Marketus Posted April 25, 2017 Author Solution Report Share Posted April 25, 2017 1) Добавляем поле в таблицу бд "_pages" поле parent_id ALTER TABLE `имя таблицы` ADD `parent_id` INT( 11 ) NOT NULL AFTER `id`2) Добавляем в api/Pages.php (строка 30) $query = "SELECT id, parent_id, url, header, name, meta_title, meta_description, meta_keywords, body, menu_id, position, visible 3) Что бы в меню выводило только главные страницы, в шаблоне главной страницы находим {if $p->menu_id == 1} и заменям на {if $p->menu_id == 1 && $p->parent_id == 0}4) Добавляем вывод контента подстраниц на главной ваш шаблон/main.tpl и на страницах остальных ваш шаблон/page.tpl {foreach $pages as $p} {if $p->parent_id == $page->id} {$p->body} {/if} {/foreach} 5) Добавляем в админку возможность выбора родительской страницы simpla/design/html/page.tpl <li><label class=property>Родительская страница</label> <select name="parent_id"> <option value="0">Не выбрана</option> {foreach $pages as $p} {if $page->id != $p->id && $p->parent_id == 0} <option value='{$p->id}' {if $p->id == $page->parent_id}selected{/if}>{$p->header|escape}</option> {/if} {/foreach} </select> </li> 6) Делаем красивый вывод страниц и подстраниц в списке страниц simpla/design/html/pages.tpl . После <div id="list"> {foreach $pages as $page} добавляем для вывода только первого уровня страниц {if $page->parent_id == 0} в конце добавляем вывод подстраниц перед {/foreach} </div> вставляем {foreach $pages as $subpage} {if $subpage->parent_id == $page->id} <div class="{if !$subpage->visible}invisible{/if} row"> <input type="hidden" name="positions[{$subpage->id}]" value="{$subpage->position}"> <div class="move cell"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$subpage->id}" /> </div> <div class="name cell"> ↳<a href="{url module=PageAdmin id=$subpage->id return=$smarty.server.REQUEST_URI}">{$subpage->header|escape}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../{$subpage->url}" target="_blank"></a> <a class="enable" title="Активна" href="#"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {/if} {/foreach} {/if} 7) Добавляем сохранения данных выбранного родителя в simpla/PageAdmin.php //после $page->id = $this->request->post('id', 'integer'); //вставляем строку $page->parent_id = $this->request->post('parent_id', 'integer'); //а так же после $this->design->assign('menus', $menus); // Добавляем подстраницы$menu_id = $this->request->get('menu_id', 'integer'); $pages = $this->pages->get_pages(array('menu_id'=>$menu_id));$this->design->assign('pages', $pages);8) так же нужно запретить показ подстраниц по прямым ссылкам view/PageView.php //заменяем это // Отображать скрытые страницы только админу if(empty($page) || (!$page->visible && empty($_SESSION['admin']))) // на это // Отображать скрытые страницы только админу if(empty($page) || $page->parent_id != 0 || (!$page->visible && empty($_SESSION['admin']))) 9) последнее... убираем подстраницы из sitemap.php // Страницы foreach($simpla->pages->get_pages() as $p) { //заменяем это if($p->visible && $p->menu_id == 1) //на это if($p->visible && $p->menu_id == 1 && $p->parent_id == 0) { $url = $simpla->config->root_url.'/'.esc($p->url); print "\t<url>"."\n"; Я не программист, сделал как видел код, потому прошу по косякам давать рекомендации в стиле "что поменять, и почему".Это решение для моих нужд, и если кому будет полезно, рад был помочь. Quote Link to post Share on other sites
n1c Posted September 14, 2017 Report Share Posted September 14, 2017 подскажите пожалуйста, как сделать не вывод контента, а вывод подменю? Quote Link to post Share on other sites
n1c Posted September 17, 2017 Report Share Posted September 17, 2017 Для вывода подменю делаю: {if $p->menu_id == 1} <li {if $page && $page->parent_id == $p->parent_id}class="selected"{/if}> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} Но показывает меню и подменю, что я делаю не так? Quote Link to post Share on other sites
loxter Posted September 17, 2017 Report Share Posted September 17, 2017 Для вывода подменю делаю: {if $p->menu_id == 1} <li {if $page && $page->parent_id == $p->parent_id}class="selected"{/if}> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} Но показывает меню и подменю, что я делаю не так? Задаете некорректный вопрос.Потому что в Simpla НЕТ никаких подменю. Если У Вас есть, значит, делали доработку свою. И если хотите задавать по ней вопрос, то, наверное, надо бы в деталях описывать, что и как... Quote Link to post Share on other sites
mishanya Posted September 17, 2017 Report Share Posted September 17, 2017 (edited) Задаете некорректный вопрос.Потому что в Simpla НЕТ никаких подменю. Если У Вас есть, значит, делали доработку свою. И если хотите задавать по ней вопрос, то, наверное, надо бы в деталях описывать, что и как... не судьба посмотреть вверх? там описано про это подменю. еще и зелененльким выделено для особенных. Edited September 17, 2017 by mishanya Quote Link to post Share on other sites
mishanya Posted September 17, 2017 Report Share Posted September 17, 2017 Для вывода подменю делаю: {if $p->menu_id == 1} <li {if $page && $page->parent_id == $p->parent_id}class="selected"{/if}> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} Но показывает меню и подменю, что я делаю не так? у вас нигде нет условия чтобы это работало.пробуйте так {foreach $pages as $p} {if $p->parent_id==$page->id} <li> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} {/foreach}выводит подстраницы на родительской странице Quote Link to post Share on other sites
n1c Posted September 17, 2017 Report Share Posted September 17, 2017 у вас нигде нет условия чтобы это работало.пробуйте так {foreach $pages as $p} {if $p->parent_id==$page->id} <li> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} {/foreach}выводит подстраницы на родительской странице Не отображает(( хочу сделать выпадающее горизонтальное меню, вот сам весь код вместе с вашим: {* Меню *} <ul id="nav"> {foreach $pages as $p} {* Выводим только страницы из 1 меню *} {if $p->menu_id == 1 && $p->parent_id == 0} <li {if $page && $page->id == $p->id}class="selected"{/if}> <a data-page="{$p->id}" href="{$p->url}">{$p->name|escape}</a> <ul> {foreach $pages as $p} {if $p->parent_id==$page->id} <li> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} {/foreach} </ul> </li> {/if} {/foreach} </ul> {* Меню (The End) *} Quote Link to post Share on other sites
loxter Posted September 17, 2017 Report Share Posted September 17, 2017 Так совсем неправильно.Вы во вложенном цикле используете такую же переменную $p, как во внешнем цикле. Пробуйте другую, например, $p2... Quote Link to post Share on other sites
n1c Posted September 19, 2017 Report Share Posted September 19, 2017 Так совсем неправильно.Вы во вложенном цикле используете такую же переменную $p, как во внешнем цикле. Пробуйте другую, например, $p2...вообще не помогло Quote Link to post Share on other sites
loxter Posted September 19, 2017 Report Share Posted September 19, 2017 вообще не помогло Видимо, ошибок разных много.Надо же не просто копировать, а понимать, что к чему.Если готовы оплачивать, обращайтесь в личку... Quote Link to post Share on other sites
n1c Posted September 24, 2017 Report Share Posted September 24, 2017 у вас нигде нет условия чтобы это работало.пробуйте так {foreach $pages as $p} {if $p->parent_id==$page->id} <li> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} {/foreach}выводит подстраницы на родительской странице Меняю на: {foreach $pages as $p} {if $p->parent_id} <li> <a data-page="{$p->parent_id}" href="{$p->url}">{$p->name|escape}</a> </li> {/if} {/foreach} отображение идет, но подменю выводится во всех меню родитель и не родитель, что нужно добавить чтобы подменю выводилось только для родителя которому оно задано? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.