Перейти к содержанию
Официальный форум поддержки Simpla

Вывод контента других страниц на одной странице


Перейти к решению Решено Marketus,

Рекомендуемые сообщения

Добрый день!

 

Возникла задача: сделать длинные кастомные страницы аля "разделы". Проблема в том что структура этих страниц по типу "лендосов" длинный ковер из разных блоков. Так вот редактировать во одном окне редактора всю страницу очень не удобно. Хотелось бы как то разделить их по блочно.
Например добавил блок "о компании" потом "партнеры" и так далее, а вывод идет на одной странице.

 

Подскажите как логичней это выстроить?

Ссылка на сообщение
Поделиться на другие сайты

Подозреваю, что нужно расширить стандартные страницы и сделать их с подстраницами... Кто поможет?

Ссылка на сообщение
Поделиться на другие сайты

можно так в цыкле выводить на главной содержимое всех видимых страниц

 

{foreach $pages as $p}
    {if $p->visible}
          {$p->body}
      {/if}
{/foreach}

 

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

 

можно так в цыкле выводить на главной содержимое всех видимых страниц

 

{foreach $pages as $p}
    {if $p->visible}
          {$p->body}
      {/if}
{/foreach}

 

Мне не только на главной

Ссылка на сообщение
Поделиться на другие сайты

делаете несколько разделов - меню по инструкции 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 айди каждого из ваших разделов (меню)

 

как бесплатный вариант

Ссылка на сообщение
Поделиться на другие сайты

Сделал! Расширил симплу -  сделал под страницы (parent_id)

 

Страницы

https://yadi.sk/i/4jusZLAV3HJVrS

 

Страница

https://yadi.sk/i/wTErH-6z3HJVu8

 

1 В сайтмап не выводит подстраницы
2 Автоматически сортирует в списке страниц под родителя + визуально показывает

3 При прямом переходе на внутреннюю выдает "страница не найдена"

 

Я подозреваю что нахардкодил где то, потому выложу инструкцию чуть позже.

Хочу еще в списке страниц сделать фильтр по родительским страницам.

Ссылка на сообщение
Поделиться на другие сайты
  • Решение

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";

 

Я не программист, сделал как видел код, потому прошу по косякам давать рекомендации в стиле "что поменять, и почему".

Это решение для моих нужд, и если кому будет полезно, рад был помочь.

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

Для вывода подменю делаю:

 

        {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}
 
Но показывает меню и подменю, что я делаю не так?
Ссылка на сообщение
Поделиться на другие сайты

 

Для вывода подменю делаю:

 

        {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 НЕТ никаких подменю. Если У Вас есть, значит, делали доработку свою. И если хотите задавать по ней вопрос, то, наверное, надо бы в деталях описывать, что и как...

Ссылка на сообщение
Поделиться на другие сайты

Задаете некорректный вопрос.

Потому что в Simpla НЕТ никаких подменю. Если У Вас есть, значит, делали доработку свою. И если хотите задавать по ней вопрос, то, наверное, надо бы в деталях описывать, что и как...

 

не судьба посмотреть вверх? там описано про это подменю. еще и зелененльким выделено для особенных.

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

 

Для вывода подменю делаю:

 

        {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}

выводит подстраницы на родительской странице

Ссылка на сообщение
Поделиться на другие сайты

у вас нигде нет условия чтобы это работало.

пробуйте так

	{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) *}
 
Ссылка на сообщение
Поделиться на другие сайты

Так совсем неправильно.
Вы во вложенном цикле используете такую же переменную $p, как во внешнем цикле. Пробуйте другую, например, $p2...

Ссылка на сообщение
Поделиться на другие сайты

Так совсем неправильно.

Вы во вложенном цикле используете такую же переменную $p, как во внешнем цикле. Пробуйте другую, например, $p2...

вообще не помогло

Ссылка на сообщение
Поделиться на другие сайты

вообще не помогло

 

Видимо, ошибок разных много.

Надо же не просто копировать, а понимать, что к чему.

Если готовы оплачивать, обращайтесь в личку...

Ссылка на сообщение
Поделиться на другие сайты

у вас нигде нет условия чтобы это работало.

пробуйте так

	{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}
 

отображение идет, но подменю выводится во всех меню родитель и не родитель, что нужно добавить чтобы подменю выводилось только для родителя которому оно задано?

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...