Регистрация
Вход через соцсети
Восстановление пароля

Меню из якорей

Новый топик
28.01.2015, 12:57
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

Здравствуйте, необходимо в компоненте сделать небольшое меню.
Компонент состоит из объектов, на которых стоят якоря, а вначале страницы небольшое якорное меню, если можно так сказать, на эти объекты.
В системных настройках компонента пишу следующее:
Код:
<?php

$anchor_menu['prefix'] = "<div class='nav-bloks anchor'><ul>";
$anchor_menu['suffix'] = "</ul></div>";
$anchor_menu['unactive'] = "<li><a href='#"<?= $f_Anchor?>"'><?= $f_Topic?></a></li>";

?>


Соответственно, Anchor - имя якоря объекта, Topic - заголовок объекта (из заголовков будет состоять меню).

Вывод в компоненте:
Код:
<?= nc_browse_level(1, $anchor_menu); ?>


Не работает((( Так понимаю дело в синтаксисе (испробовала кучу вариантов), а вообще я верно действую? Могу я в навигации убирать %URL и %Name, и ставить другие значения?

korvin
28.01.2015, 14:34
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

Техподдержка ответила, что
Цитата:
Шаблон навигации - строка, там нельзя использовать скобки PHP <? ?> и код в обычном виде, правильнее всего использовать макросы %URL и %Name.

Может кто знает как это реализовать по другому?

korvin
29.01.2015, 00:27
Ответить | Цитировать
Игорь
Stark
Игорь

Зарегистрирован:
2011-11-20
Сообщений: 396

Можно реализовать или запросом к БД или через s_list_class, т.е. вывести список объектов, но со своим шаблоном, в котором присутствуют только ссылка (якорь и Название).
29.01.2015, 08:35
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

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

korvin
29.01.2015, 15:15
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

zhenya_mzmo
Код:
$anchor_menu['unactive'] = "<li><a href='#".$f_Anchor."'>".$f_Topic."</a></li>";

Синтаксис такой.
Вот только навигация не знает ваших объектов и не выставит их хоть и напишет значение первого.
Навигация не ваш случай. Вам придется использовать выборку значений из базы данных
Пример
Вариант 1
Создайте шаблон компонент предположим его число 90
Далее в макете или где должны выводится ссылки вставляем либо s_list_class либо ее наследника 5 версии функцию nc_objects_list()
<?=s_list_class($sub,$cc,"nc_ctpl=90",true)?>

В таком виде будет работать если компонент с объектами стоит последним на странице при условии если их несколько (редкий случай) иначе укажите $sub,$cc
$cc - номер текушего инфоблока.

Вариант 2
Расположите этот код в месте где нужно вывести
Код:
<?
// Получить объекты из компонента 2000 где объект включен и расположен в компоненте текущего раздела. Все их поля чтобы не было вдруг ошибок
$items = $nc_core->db->get_results("SELECT * FROM Message2000 WHERE Checked=1 AND Sub_Class_ID=".$cc." ORDER BY Priority", ARRAY_A );
// Простейший цикл. Разложит полученный массив всех строк $items на отдельные массивы по одной строке $item. Что бы понять как он работает стоит изучить базу данных
// Условие если что то нашел в базе то выводим
if($items){
?>
<ul>
<?
foreach($items as $item){ ?>
<li><a href='#<?=$item["Anchor"]?>'><?=$item["Topic"]?></a></li>
<? } ?>
?>
</ul>
<?
}
// Закрыть условие
?>


В таком виде будет работать если компонент с объектами стоит последним на странице при условии если их несколько (редкий случай) иначе укажите $sub,$cc
$cc - номер текушего инфоблока.

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
30.01.2015, 07:21
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

Александр, большое спасибо за такой подробный ответ да
буду пробовать, а изучить мне еще очень много надо)))

korvin
30.01.2015, 09:18
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

Ура!!!! Получилось!!! Только у меня список идет по порядку не правильно, с конца(((

Правда по ходу еще заметила, что хорошо бы было это меню делить на два столбца, в css все прописала, чтоб красиво выглядело. В html счас это выглядит так:
Код:

<div class="nav-bloks anchor">
<ul>
<li><a href="#1">бла-бла-бла</a></li>
<li><a href="#2">бла-бла-бла</a></li>
<li><a href="#3">бла-бла-бла</a></li>
<li><a href="#4">бла-бла-бла</a></li>
<li><a href="#5">бла-бла-бла</a></li>
</ul>
</div>
<div class="nav-bloks anchor">
<ul>
<li><a href="#6">бла-бла-бла</a></li>
<li><a href="#7">бла-бла-бла</a></li>
<li><a href="#8">бла-бла-бла</a></li>
<li><a href="#9">бла-бла-бла</a></li>
<li><a href="#10">бла-бла-бла</a></li>
</ul>
</div>

То есть мне нужно, чтобы количество "Anchor" в компоненте подсчитывалось, и делилось пополам с вариацией, грубо говоря, 5*5, 3*3, а если не делится на равное количество, то 5*4, 4*3...
После деления попалам записывалось бы так же:
Код:
<?
foreach($items as $item){ ?>
<li><a href='#<?=$item["Anchor"]?>'><?=$item["Topic"]?></a></li>
<? } ?>

И как это сделать?

korvin
30.01.2015, 15:30
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Строка 2 предыдущего кода
Код:
$items = $nc_core->db->get_results("SELECT * FROM Message2000 WHERE Checked=1 AND Sub_Class_ID=".$cc." ORDER BY Priority DESC", ARRAY_A );


К циклу добавьте счетчик (число которое увеличивается с каждым проходом цикла)
Код:
<?
$i = 1;
foreach($items as $item){ ?>

<? // Если счетчик больше 5 то обнулить счетчик, закрыть тег и снова открыть для нового списка.
if($i > 5){ $i = 1; ?>
</ul>
</div>
<div class="nav-bloks anchor">
<ul>
<? } ?>

<li><a href='#<?=$item["Anchor"]?>'><?=$item["Topic"]?></a></li>
<? $i++; } ?>
?>


Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
02.02.2015, 07:26
Ответить | Цитировать
zhenya_mzmo

Зарегистрирован:
2006-11-08
Сообщений: 37

Спасибо огромное, вы меня очень выручили, все получилось!!!
подмигиваетгордыйусмешка

korvin
198 196 2015-02-02 07:26:27 13981
Описание проекта