2012-05-26 3 views
6

Я создал разные страницы для всех этих категорий: книги, мобильные телефоны, comp и т. Д. Теперь я хочу разместить этот тип навигационного меню (как показано на рисунке) на всех страницах, и открытие страницы должно выделить соответствующую ссылку меню.Как создать меню навигации для разных страниц в SDL Tridion?

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

Если нет, предложите любой другой лучший подход для этого.

enter image description here

ответ

5

Если вы используете ASPX как типы страниц, ниже описан другой логики для навигации:

  1. Создать одну навигацию XML (содержит все страницы) с важной информацией страниц (ID, путь, название ...)

  2. Создать контроль ascx, который будет генерировать сухарь или любую другую навигацию. В качестве контроля параметров должен получить номер текущей страницы ID

  3. Изменить страницу DWT (размещая контроль ASCX)

На этом пути вы уменьшаете рендеринга (публикации) времени, навигация будет оказываться на странице загрузки. К сожалению, таким образом вы увеличиваете время загрузки страницы. Это зависит от вашей потребности, что является более подходящим решением для вас. Обновление навигации XML является одной из проблем этого подхода.

9

Наиболее распространенным способом для создания любой навигации в TRIDION, чтобы просто создать его в качестве шаблона C# на основе структуры групп и страниц.

Например крошка след может быть легко сгенерирована внутри шаблона (либо C# фрагмент или класс, реализующий ITemplate) что-то вроде этого:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var breadcrumb = page.Title; 
while (current.OrganizationalItem != null) 
{ 
    current = current.OrganizationalItem; 
    breadcrumb = current.Title + " > " + breadcrumb; 
} 
package.PushItem("breadcrumb", 
       package.CreateStringItem(ContentType.Text, breadcrumb)); 

выше фрагмент действительно только показывает, как перейдите по иерархии структурных групп вверх. Вам все равно придется составлять каждую структурную группу в качестве ссылки, возможно, глядя на PublishUrl свойство каждого StructureGroup.

Я знаю, что вы не спрашивали о тротуаре, ваш взгляд больше похож на левый. Но подход для всех элементов навигации схож: перейдите по соответствующим страницам и StructureGroups с помощью TOM.NET в ваш ITemplate и создайте свой HTML-код для навигации.

Чтобы получить список всех страниц в текущем StructureGroup (и отметьте текущий), я бы ожидать, что-то вроде этого:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var sg = (StructureGroup) page.OrganizationalItem; 
string result = "<ul>"; 
foreach (var page in sg.GetItems()) 
{ 
    result += (page.Id != current.Id) ? "<li>" : "<li class='selected'>"; 
    result += page.Title; 
    result += "</li>"; 
} 
result += "</ul>"; 
package.PushItem("siblings", package.CreateHtmlItem(result)); 

Пожалуйста, см this great example from Nick where he generates an entire sitemap. Это ближе к тому, что вам нужно в конце, но, конечно, намного больше кода (слишком много для воспроизведения здесь). Альберт также поделился некоторыми из his experience with this approach and mentions the alternatives.

Смежные вопросы