Динамическая модификация ссылок для пунктов меню своего компонента

  • 14 Ответов
  • 433 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Смысл работы должен быть такой, как в K2 катагориях.
Есть компонент, который создает категории. В виде лежит файл манифеста отвечающий за меню views/categories/tmpl/default.xml
<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="COM_PHOENIX_MANUFACTURERS">
    </layout>
    <fields name="request">
        <fieldset name="request" addfieldpath="/administrator/components/com_mycomponent/models/fields">
            <field name="id"
                   type="category"
                   label="CATEGORIES"
                   description="CATEGORIES"
                   required="true"
                   edit="true"
                   clear="false"
            />
        </fieldset>
    </fields>
</metadata>

Далее по пути /administrator/components/com_mycomponent/models/fields/category.php вызывается код с запросами за категориями из бд.
И возвращается в виде селекта. С этим проблем нет.
Проблема возникает в другом:
Пункт меню не сохраняет ссылку должным образом (потому что я не знаю как это сделать). К примеру мне надо получить:
index.php?option=com_mycomponent&view=categories&id=10
а я получаю ту же ссылку, что и без выборки категории (т.е. как в ссылку пункта меню добавить этот самый id ?):
index.php?option=com_mycomponent&view=categories

p.s. также при сохранении пункта меню - не сохраняет выбранный селект (но то уже потом буду разбираться)
p.p.s. Аналогичный функционал реализован через модальное окно в компоненте контента или контактов, но там еще больше вопросов по коду возникает..
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Онлайн Aleks.Denezh

Понятно что ничего не понятно!
По такой конструкции у меня все работает, проверьте может кодировка XML файла не в той кодировке (не utf-8)? Может где то ID не возвращает...

*

Оффлайн robert

Может быть, стоит назвать тип поля не "category", а по-другому? category - это как бы уже core type. И нелишне будет добавить аттрибут extension.
« Последнее редактирование: 14.01.2016, 15:55:46 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Онлайн Aleks.Denezh

да кстати Роберту  + за внимательность, а где в вашем поле type="category" аттрибут extension из которого будут браться категории? Без него это поле пахать вообще не должно! И естественно у вас не будет какого либо ID появляться!

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Разобрался...
Дело было не в extension и не в type="category".
Код, который был в папаук fields, отвечающий за вывод кастомного селекта был скопирован с другой части сайта, где был серьезно перепилен и вырезан атрибут name. И вот из-за отсутствия name в форме - сохранение происходило некорректно. Но все равно спасибо за помощь :)
p.s. Extension, на сколько я понял, нужен для явного указания к какому компоненту должен ссылаться field из манифеста. Вот только нужен он, только в тех случаях, когда мы хотим в нашем компоненте обратиться к филду из другого компонента.
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Онлайн Aleks.Denezh

p.s. Extension, на сколько я понял, нужен для явного указания к какому компоненту должен ссылаться field из манифеста. Вот только нужен он, только в тех случаях, когда мы хотим в нашем компоненте обратиться к филду из другого компонента.
Вообще то если не указан extension то будет так

и предупреждение будет о том что не указан аттрибут

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Вообще то если не указан extension то будет так

и предупреждение будет о том что не указан аттрибут
Ааааааа вон оно что.... спасибо!
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Оффлайн robert

Разобрался...
Дело было не в extension и не в type="category".
Код, который был в папаук fields, отвечающий за вывод кастомного селекта был скопирован с другой части сайта, где был серьезно перепилен и вырезан атрибут name. И вот из-за отсутствия name в форме - сохранение происходило некорректно.
Не понял. Разве name не задается в views/categories/tmpl/default.xml?

И, будьте добры, поделитесь секретом, как вы могли этого добиться
Смысл работы должен быть такой, как в K2 катагориях.
Есть компонент, который создает категории. В виде лежит файл манифеста отвечающий за меню views/categories/tmpl/default.xml
Спойлер
[свернуть]
Далее по пути /administrator/components/com_mycomponent/models/fields/category.php вызывается код с запросами за категориями из бд.
И возвращается в виде селекта. С этим проблем нет.
? Чтобы не быть голословным, я создал 2 файла в папке com_mycomponent/models/fields: category.php и mycategory.php. Так вот, при указании типа поля = "category" опции всегда возвращаются отсюда: libraries/legacy/form/field/category.php.
« Последнее редактирование: 15.01.2016, 01:55:49 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Не понял. Разве name не задается в views/categories/tmpl/default.xml?
И, будьте добры, поделитесь секретом, как вы могли этого добиться?
если Вы создаете кастомный тип поля, его поведение полностью можно переопределить в php файле, который надо добавить в папку models/fields (файл должен быть одноименным с типом поля).
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Оффлайн robert

если Вы создаете кастомный тип поля, его поведение полностью можно переопределить в php файле, который надо добавить в папку models/fields (файл должен быть одноименным с типом поля).
Не нужно меня этому учить. Меня интересует конкретно ваш случай:
-вы создали свой тип поля,
-назвали его именем существующего типа (причем core type) - category,
IMHO, система не будет обращать внимания на ваш тип, она просто берет его из своих библиотек. По крайней мере, на практике у меня вышло так, еще не было времени заглянуть в код.
Так вот, у вас этот новый, но со старым именем category, тип поля вообще существует в реальности или это просто болтовня?

Вот эта чушь от вас вселяет в меня сомнение:
p.s. Extension, на сколько я понял, нужен для явного указания к какому компоненту должен ссылаться field из манифеста. Вот только нужен он, только в тех случаях, когда мы хотим в нашем компоненте обратиться к филду из другого компонента.
« Последнее редактирование: 15.01.2016, 13:31:15 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Онлайн dmitry_stas

IMHO, система не будет обращать внимания на ваш тип, она просто берет его из своих библиотек. По крайней мере, на практике у меня вышло так, еще не было времени заглянуть в код.
и у меня тоже. видимо потому что это так и есть :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Уточню, я его назвал не так. Просто изменил имя на "бла-бла". Этим "бла-бла" оказалась "category" (фактически у меня в коде другое имя). И не учел что оно зарезервировано. Я не учу, вы просто спросили "как" - я ответил. Про тип category вообще не спорю не чуть.
Просто надо было написать: ИЗВИНИТЕ, Я УМЫШЛЕНО ИЗМЕНИЛ ИМЯ ТИПА ПРИ ПОСТАНОВКЕ ЗАДАЧИ НА ФОРУМЕ, И НЕ ПОДУМАЛ, ЧТО ЭТО ЗАРЕЗЕРВИРОВАННЫЙ ТИП СИСТЕМЫ :)
Цитировать
Вот эта чушь от вас вселяет в меня сомнение
Я даже подчеркнул: на сколько я понял. Чушь - это не верное утверждение. А я не утверждаю.
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
Цитировать
тип поля вообще существует в реальности или это просто болтовня?
Это просто болтовня. Просто смысл изначального вопроса был в другом, и причина в другом, и я не подумал, что так вот боком выйдет мне это имя "category", которое не существует в реальности на моем сайте...
« Последнее редактирование: 15.01.2016, 14:40:50 от NeuroZ »
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть

*

Оффлайн robert

ОК, все нормально. Просто ваш ответ
Разобрался...
Дело было не в extension и не в type="category".
+ ваша неточность отняли у меня некоторое время на проверку.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн NeuroZ

  • ***
  • 131
  • [+]0 / [-]0
  • Разработка сайтов и J! расширений под ключ
    • Просмотр профиля
ОК, все нормально. Просто ваш ответ+ ваша неточность отняли у меня некоторое время на проверку.
Виноват :(
<h1 id="h2" class="h3" data-h4="h5"> или как заставить мир тебя ненавидеть