Ситуация: сайт, на главной которого должно быть левое меню. Я его могу сделать, добавить пункты руками, в принципе. Однако, это меню полностью совпадает с генерируемым меню каталога, расположенного, скажем, в ~/catalogue. Т.е. Если я захожу http://mysite/catalogue/, то левое меню отражает структуру каталога, всё как и надо.
Теперь вопрос: как красиво сделать, чтобы по адресу http://mysite/ я также наблюдал вышеназванное меню?
На нашем Битриксе такая штука, только в обратную сторону: надо показывать меню не на уровень ниже, а на уровень выше. Просто чуть-чуть переписали компонент меню. Особо рьяные могут использовать API напрямую, там всего-то нужно получить список разделов из определенной ветки сайта.
В принципе, получилось. Однако, чтобы нормально сделать, приходится всё-таки компоненту system.PublicMenu расширять.
Пожелание разработчикам: сделайте, плз, в system.PublicMenu параметр типа "Использовать меню раздела", куда можно было бы (для моего случая) втоптать "~/catalogue", скажем. И тогда бы в нем нельзя было бы править элементы, а брались бы они из раздела. Очень удобно было бы и для моего случая и для случая Сергея Ковалёва. Сделать это очень просто. А вещь нужная. Особенно для сайтов-каталогов.
По сути, я на первый случай просто сделал свой шаблон для system.PublicMenu и вместо дефолтного
Код
if (Component.Menu != null)
{
...
foreach (Bitrix.BXPublicMenuItem item in Component.Menu)
{
...
Сделал:
Код
BXPublicMenuItemCollection menuItems = Component.Menu;
if (menuItems == null)
menuItems = BXPublicMenu.Menu.GetMenuByUri("left", "~/catalogue");
if (menuItems != null)
{
...
foreach (BXPublicMenuItem item in menuItems)
{
...
Теперь если в явном виде меню не сделать, то шаблон использует левое меню из каталога. А хотелось бы, чтобы подобное поведение можно было бы задать в параметрах компонента.
Алексей Кузнецов пишет: Пожелание разработчикам: сделайте, плз, в system.PublicMenu параметр типа "Использовать меню раздела", куда можно было бы (для моего случая) втоптать "~/catalogue", скажем. И тогда бы в нем нельзя было бы править элементы, а брались бы они из раздела. Очень удобно было бы и для моего случая и для случая Сергея Ковалёва. Сделать это очень просто. А вещь нужная. Особенно для сайтов-каталогов.
Галочка полезная, но нужно будет учитывать один нюанс. Компонент меню подключается, как правило, в шаблоне сайта (master page'е). Если для левого меню зашить путь ~/catalogue - это значит, что для всех остальных разделов сайтов меню будет строится относительно раздела catalogue:
/default.aspx - меню каталога /catalogue/ - меню каталога /about/default.aspx - меню каталога вместо меню раздела About /about/team.apsx - меню каталога вместо меню раздела About /about/contacts.aspx - меню каталога вместо меню раздела About
Т.е. придется в параметрах компонента делать MenuURI="<%= (это_главная_страница ? "~/catalogue" : текущий_URI )%>".
Есть еще в планах сделать отдельный компонент, генерирующий меню из разделов инфоблока.