Jump to content

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


Go to solution Solved by Marketus,

Recommended Posts

Добрый день!

 

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

 

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

Link to post
Share on other sites

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

 

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

 

Edited by mishanya
Link to post
Share on other sites

 

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

 

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

 

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

 

Страницы

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

 

Страница

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

 

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

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

 

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

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

Link to post
Share on other sites
  • Solution

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

 

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

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

Link to post
Share on other sites
  • 4 months later...

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

 

        {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}
 
Но показывает меню и подменю, что я делаю не так?
Link to post
Share on other sites

 

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

 

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

Link to post
Share on other sites

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

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

 

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

Edited by mishanya
Link to post
Share on other sites

 

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

 

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

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

Link to post
Share on other sites

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

пробуйте так

	{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) *}
 
Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

 

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

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

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

Link to post
Share on other sites

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

пробуйте так

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...