Предлагаю достопочтенной публике (в первую очередь начинающим) ознакомиться с простеньким но полезным снипетом для создания вторичной навигации.
Под вторичной навигацией тут понимаются ссылки "Карта сайта" или "Обратная связь", которые обычно находятся не весть где на странице, и WayFinder’ом так просто их не сгенерить...
Главное требование к таким ссылкам - не ссылаться на себя. Например, логотип в шапке - это ссылка на главную страницу, но он не должен быть ссылкой на главной странице! Там это должна быть обычная картинка.
Конечно, можно просто прописать нужные ссылки в шаблоне, если озвученное требование для вас не более чем прихоть, так будет действительно проще. Но мы не ищем лёгких путей!
И так, создаём новый сниппет с именем
MakeLink и кодом приведённым ниже (снизу он ещё прикреплён файлом; модифицировать можно всё и как угодно, но распространять сильно изменённые варианты желательно
сюдой):
<?php
/* MakeLink [0.6]
** This snippet allows create single non self-referred links
* ------------------------------------------------------
*
** Most simple example:
* [[MakeLink? &docid=`12` &alink_text=`Sitemap`]]
*
** Parametrs:
* &docid : document id to generate link (* required parameter);
* &alink_text : active link text (* minimally necessary);
* &alink_chunk : active link chunk (use instead of the &alink_text);
*
* &dlink_text : disabled "link" text;
* &dlink_chunk : disabled "link" chunk (use instead of the &dlink_text);
*
* &link_class : CSS class to assign for tag <a>;
* &link_id : CSS identifier to assign for tag <a>;
*
** Exemples of use:
* [[MakeLink? &docid=`12` &alink_text=`Contact us` &dlink_chunk=`contact_img_chunk`]]
* <span style="color:#999;">[[MakeLink? &docid=`12` &alink_text=`Contact us`]]</span>
* <div id="logo">[[MakeLink? &docid=`1` &alink_chunk=`logo_link_tpl` &link_id=`logo_link`]]<div>
*
* ------------------------------
** Copyright (C) 2007, [e]Bu$ter
** e-mail: eBuster [аt] eppz.net */
if (!isset($docid)) {
$link = '<span style="color:red;"><strong>MakeLink:</strong> Please, specify &docid parametr!</span>';
return $link;
}
$alink = (isset($alink_chunk))? $modx->getChunk($alink_chunk): ((isset($alink_text))? $alink_text : '<span style="color: blue;"><strong>MakeLink:</strong> Specify text for this link.</span>');
$dlink = (isset($dlink_chunk))? $modx->getChunk($dlink_chunk): ((isset($dlink_text))? $dlink_text: $alink);
$link_class = (isset($link_class))? " class=\"$link_class\"": '';
$link_id = (isset($link_id))? " id=\"$link_id\"" : '';
if ($docid == $modx->documentIdentifier) {
$link = $dlink;
} else {
$url = $modx->makeUrl($docid);
$link = "<a href=\"$url\"$link_id$link_class>$alink</a>";
}
return $link;
?>
Теперь, в шаблоне (или в отдельном чанке, вызывая этот чанк в шаблоне) пишем:
[[MakeLink? &docid=`12` &alink_text=`текст ссылки`]]
В итоге, если alias у страницы с
id=12, равен
test, то на всех страницах кроме
test, снипет выведет
<a href="test">текст ссылки</a>
а на странице
test выведет
Это самый простейший случай.
Вместо [tt]текст ссылки[/tt], можно выводить целые чанки! А из чанков, чего уже только нельзя вызывать...
Всего (кроме праметра
&docid, который понятно зачем нужен) сниппет может принимать четыре параметра:
- &alink_chunk - "active link chunk": имя чанка содержащего текст (изображение, снипет, etc...) для активной ссылки
или
- &alink_text - "active link text": текст активной ссылки (это мы уже проходили);
Приоритет у параметра
alink_chunk. Т.е. если он будет указан вместе с
alink_text, то последний будет проигнорирован. Из чего следует, что одновременно использовать и тот и другой параметр бессмысленно.
- &dlink_chunk - "disabled link chunk": имя чанка для неактивной "ссылки"
или
- &dlink_text - "disabled link text": текст для неактивной "ссылки";
Если не указывать
dlink_chunk или
dlink_text, то текст ссылки будет унаследован из параметра
alink_chunk, или из
alink_text если вы использовали его. Из это следует, что единственным минимально-необходимым параметром из этой группы является
alink_text.
- &link_class - CSS class для тега <a>;
- &link_id - CSS id для тега <a>;
Параметры
link_class и
link_id испульзуем по необходимости, они не обязательные.
© [e]Bu$ter, 2007
(
нравится мне этот смайлик)
P.S. Комментарии, дополнения, указания на ошибки, ну и конечно же помидоры, прошу в студию!
UPD 01 Февраль 2007: Всё таки прикрепил снипет файлом.
UPD 21 октябрь 2007: Поздно, но всё таки спрятал мыло в прикреплённом файле — «они» его нашли!