Как сделать постраничную навигацию?

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
seventh
Forum Members
Forum Members
Posts: 40
Joined: Sat May 23, 2009 10:33 pm

Как сделать постраничную навигацию?

Post by seventh »

Есть несколько страниц находящихся на одном уровне. Необходимо сделать на кажной из них меню только в виде пунктов "следующая" и "предыдущая".
Подскажите, пожалуйста, как быть?



UPD Вобщем с вопросом я разобрася (см.окументация по тегу cms_selflink).
Но проблема в следующем: навигация сквозная по всем уровням, а мне надо чтобы была только на заданном. И дойдя до последней страницы, чтобы ссылка "Next" исчезла, а не предлагала шерстить подпункты следующего меню.
Last edited by seventh on Sun Jul 26, 2009 11:18 pm, edited 1 time in total.
Sonya

Re: Как сделать постраничную навигацию?

Post by Sonya »

seventh wrote: Есть несколько страниц находящихся на одном уровне. Необходимо сделать на кажной из них меню только в виде пунктов "следующая" и "предыдущая".
Подскажите, пожалуйста, как быть?
{cms_selflink dir="prev"} <- предыдущая
{cms_selflink dir="next"} <- следующая
seventh wrote: UPD Вобщем с вопросом я разобрася (см.окументация по тегу cms_selflink).
Но проблема в следующем: навигация сквозная по всем уровням, а мне надо чтобы была только на заданном. И дойдя до последней страницы, чтобы ссылка "Next" исчезла, а не предлагала шерстить подпункты следующего меню.
Можно добавить разделитель меню или невидимый заголовок меню до и после.
seventh
Forum Members
Forum Members
Posts: 40
Joined: Sat May 23, 2009 10:33 pm

Re: Как сделать постраничную навигацию?

Post by seventh »

Sonya wrote: Можно добавить разделитель меню или невидимый заголовок меню до и после.
Спасибо, но не совсем ясно.
О разделителях (информации больше чем 3 предложения с кратким описанием о них не нахожу).
Я ставлю разделители, но картины это не меняет. Первая страница уровня на котром реализуется навигация (1) содержит ссылку ведущую на родительскую страницу(A) под видом предыдущей, что нежелательно. Последняя(7) как и ранее предлагает в качестве следующей перейти на верхний уроывень меню. (страницу B)
Какие-то параметры? Настройки?

С невидимым заголовком,извините, совсем всё непонятно в виду отсутствия информации.


Структура сайта такая

Главная страница (содержит информацию)
         |
         ---------------- Раздел А  (содержит информацию)
         |        |
         |        +-------------- 1
         |        |
         |        +-------------- 2
         |        |
         |        +-------------- 3
         |        |
         |        +-------------- 4
         |        |
         |        +-------------- 5
         |        |
         |        +-------------- 6
         |        |
         |        +-------------- 7
         |
         +--------------Раздел B (содержит информацию)


PS Хоть убейте, я немогу понять как работает сепаратор и "секция заголовка" читая в 10 раз описание "сепаратор делает то что в его названии..." яснее не становится. Это и ежу понятно, что он он разделяет. Но как имено правильно его ипользовать и в каких случаях?, тоже самое и с секцией загловка.
Last edited by seventh on Tue Jul 28, 2009 8:56 pm, edited 1 time in total.
Sonya

Re: Как сделать постраничную навигацию?

Post by Sonya »

На самом деле я ошиблась, разделители и заголовки не убирают родителей, только добавление "неактивных" dummy-страниц до и после решает проблему, но не элегантно, конечно.

Несколько других решений посредством смарти можно найти здесь http://forum.cmsmadesimple.org/index.ph ... 752.0.html
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Как сделать постраничную навигацию?

Post by ZYV »

Я когда то через заголовски секций + Smarty код делал.
unsigned double ZYV;
seventh
Forum Members
Forum Members
Posts: 40
Joined: Sat May 23, 2009 10:33 pm

Re: Как сделать постраничную навигацию?

Post by seventh »

Большой спасибо :)
Всё получилось. Я обобщу все моменты с которыми пришлось столкнуться, чтобы больше на эти грабли никто не наступал.

Лирическое отступление: Я не программист, а дизайнер. В связи с недопонимаем с моими прграммистами на тему "невозможности" пришлось месяц назад ознакомиться с PHP и работой СMS изнутри.


1 Вариант с 3 шаблонами

В первом для первой страницы есть только  ссылка на следующую страницу
{cms_selflink dir="next"   label=""}

Во втром, для всех страниц:
{cms_selflink dir="next"   label=""}
{cms_selflink dir="previous"   label=""}

Во третьем, для последней:
{cms_selflink dir="previous"   label=""}

Однако это не очень хороший метод, подходит для "своего" сайта и то, если есть уверенность что изменений в шаблонах в дальнейшем не будет. Для редактора такие заморочки - лишняя суета и погрешности.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------


2 Вариант с одним шаблоном но с передаваемыми ему данными

в шаблон вставляется следующее:
{if !isset($firstchild)}{cms_selflink dir="previous"   label=""}{/if}
то есть не показывать сслыку на предыдущую страницу, если существует переменная firstchild

{if !isset($lastchild)}{cms_selflink dir="next"   label=""}{/if}
аналогично, не показывать сслыку на следующую, если существует переменная lastchild.

Стало быть первой странице надо задать переменную firstchild, а последней lastchild.
Автор этого метода уверяет что делается это с помощью  Metadata для данной страницы:,
однако у меня не сработало и я ввёл данные в  Данные или логика Smarty для данной страницы:,
что какжется более логичным.

А данные такие - для первой страницы
{assign var='firstchild' value='1'}

Для последней
{assign var='lastchild' value='1'}

страницы посредине не трогаются

Это уже лучше, сохраняем единый макет и редактору будет проще понять, что от него требуется (всего лишь делать копи-паст иногда). Однако, всё равно решение не совсем для сайта "на экспорт"

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3 Вариан с помощью CGSimpleSmarty

Тут было много граблей, может кто будет умнее и всё знает. Я не знал ничего, поэтому подробно.

1) То что это отдельный устанавливаемый  модуль я не знал. Поэтому найденный код не сработал.
2)В менеджере модулей CGSimpleSmarty я нашел, но версия 1.4 была заявлена как несовместимая(у меня установлена система 1.5.4 "Carolina") и ничего более не предлагалось.
3)Находясь в менеджере в закладке Настройки я нашел чекбокс "Показывать только новейшие версии". Получил доступ к старым версиям.
4)Скачал предыдущую установил
5)В шаблон вставил такой код
определение наличия предыдущей страницы

{$cgsimple->get_sibling("prev","prev_sibling")}{if !empty($prev_sibling)}{cms_selflink page="$prev_sibling" text="Previous"}{/if}

и следующей

{$cgsimple->get_sibling("next","next_sibling")}{if !empty($next_sibling)}{cms_selflink page="$next_sibling" text="Next"}{/if}

Этот вариант, мне кажется идеальным. Процесс автоматизирован и редактору не нужно знать ничего лишнего.
Last edited by seventh on Thu Jul 30, 2009 10:33 am, edited 1 time in total.
seventh
Forum Members
Forum Members
Posts: 40
Joined: Sat May 23, 2009 10:33 pm

Re: Как сделать постраничную навигацию?

Post by seventh »

Большой спасибо :)
Всё получилось. Я обобщу все моменты с которыми пришлось столкнуться, чтобы больше на эти грабли никто не наступал.

Лирическое отступление: Я не программист, а дизайнер. В связи с недопонимаем с моими прграммистами на тему "невозможности" пришлось месяц назад ознакомиться с PHP и работой СMS изнутри.


1 Вариант с 3 шаблонами

В первом для первой страницы есть только  ссылка на следующую страницу
{cms_selflink dir="next"   label=""}

Во втром, для всех страниц:
{cms_selflink dir="next"   label=""}
{cms_selflink dir="previous"   label=""}

Во третьем, для последней:
{cms_selflink dir="previous"   label=""}

Однако это не очень хороший метод, подходит для "своего" сайта и то, если есть уверенность что изменений в шаблонах в дальнейшем не будет. Для редактора такие заморочки - лишняя суета и погрешности.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------


2 Вариант с одним шаблоном но с передаваемыми ему данными

в шаблон вставляется следующее:
{if !isset($firstchild)}{cms_selflink dir="previous"   label=""}{/if}
то есть не показывать сслыку на предыдущую страницу, если существует переменная firstchild

{if !isset($lastchild)}{cms_selflink dir="next"   label=""}{/if}
аналогично, не показывать сслыку на следующую, если существует переменная lastchild.

Стало быть первой странице надо задать переменную firstchild, а последней lastchild.
Автор этого метода уверяет что делается это с помощью  Metadata для данной страницы:,
однако у меня не сработало и я ввёл данные в  Данные или логика Smarty для данной страницы:,
что какжется более логичным.

А данные такие - для первой страницы
{assign var='firstchild' value='1'}

Для последней
{assign var='lastchild' value='1'}

страницы посредине не трогаются

Это уже лучше, сохраняем единый макет и редактору будет проще понять, что от него требуется (всего лишь делать копи-паст иногда). Однако, всё равно решение не совсем для сайта "на экспорт"

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3 Вариан с помощью CGSimpleSmarty

Тут было много граблей, может кто будет умнее и всё знает. Я не знал ничего, поэтому подробно.

1) То что это отдельный устанавливаемый  модуль я не знал. Поэтому найденный код не сработал.
2)В менеджере модулей CGSimpleSmarty я нашел, но версия 1.4 была заявлена как несовместимая(у меня установлена система 1.5.4 "Carolina") и ничего более не предлагалось.
3)Находясь в менеджере в закладке Настройки я нашел чекбокс "Показывать только новейшие версии". Получил доступ к старым версиям.
4)Скачал предыдущую установил
5)В шаблон вставил такой код
определение наличия предыдущей страницы

{$cgsimple->get_sibling("prev","prev_sibling")}{if !empty($prev_sibling)}{cms_selflink page="$prev_sibling" text="Previous"}{/if}

и следующей

{$cgsimple->get_sibling("next","next_sibling")}{if !empty($next_sibling)}{cms_selflink page="$next_sibling" text="Next"}{/if}

Этот вариант, мне кажется идеальным. Процесс автоматизирован и редактору не нужно знать ничего лишнего.
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Как сделать постраничную навигацию?

Post by ZYV »

2 -> это устаревший метод, когда автор писал это секции для логики просто не было.
3 -> надо ставить последнюю версию CMSMS.

Вообще всё как-то очень замудрено.

Я бы сделал шаблон меню и вызывал его с collapse и ограничением уровня (2, 3 или как там надо), а потом просто ставил условие типа {if i 1} выводить_prev, а i там либо в foreach есть, либо можно сделать {assign } i = 0 и i++ на каждом шаге foreach.

В общем мутят, мутят... А программистов тех надо избить за профнепригодность. Хотя может они говорили, что невозможно за такие деньги.
unsigned double ZYV;
seventh
Forum Members
Forum Members
Posts: 40
Joined: Sat May 23, 2009 10:33 pm

Re: Как сделать постраничную навигацию?

Post by seventh »

надо ставить последнюю версию CMSMS
На локальном серваке не поставилась, пока разбираться не стал, может  я туплю. Посмотрим.
Вообще всё как-то очень замудрено.
Я еще плохо говорю , со словарём :)
Я бы сделал шаблон меню и вызывал его с collapse и ограничением уровня (2, 3 или как там надо), а потом просто ставил условие типа {if i 1} выводить_prev, а i там либо в foreach есть, либо можно сделать {assign } i = 0 и i++ на каждом шаге foreach.
Да я тоже сразу же такой алгоритм представил, это логично и по-человечески, но я не сображаю еще всех возможностей ( я только с прошлой недели за СMSSM взялся) и теряюсь что и где можно делать.
Пытался так делать, но синтаксис недопонял.

Я ж и выманиваю какие-то примеры, чтобы посмотреть как правильно пишется (логику-то я сам могу продумать, а именно чем оперировать пока учим)
А программистов тех надо избить за профнепригодность. Хотя может они говорили, что невозможно за такие деньги.
В вопросе денег я никого никогда не ограничиваю, я просто включаю в бюджет стоимость работы людей, которую они сами заявляют, делать по-дешеве не уговариваю, потому что не люблю когда с аналогичными просьбами обращаются ко мне.
Там был камень преткновения - лишний шаблон - это "трудно" и блок контента "может быть только один".
Поюс визивиг - словами не описать. Для каких-то халтур это канало. Для текущих проектов мне приглянулась данная система.
Post Reply

Return to “Russian - русский”