Как добавить в меню ссылку на компонент ?

  • 36 Ответов
  • 451 Просмотров

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

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Учебный компонент ХаллоуВордзес есть и если в адресной строке забить прямую ссылку(com_helloworld) - то отображается.

Но при попытке добавить в меню - его не видно в списке.

Вопрос:
Что сделать, чтобы компонент был виден в списке - при создании меню ?
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут


*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Обана - ано работает ! ! ! : - ))) Ты меня почти спас :  -)))) Благодарю : - )

Единственно что, по ссылке небыло написано о том, что нужно в установочном XML указывать прямой путь к файлу, потому как автоматом при инсталле компонента - это почему то не подхватывалось.

Как я понял: option=com_helloworld&view=helloworld

В папке компонента, движок докапывается до site\helloworld.php    -  и его запускает как точку входа. А зачем в адресной нужна: view=helloworld  ?  Это указание на подключение шаблона по адресу:  site\views\helloworld\tmpl\default.xml    ?
« Последнее редактирование: 26.01.2017, 00:04:03 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут


*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Разобрался с этим примером.

А то, что он подразумевается для версии 2.5  а  я ковыряюсь с 3.6  - там нет концептуальных нововведений ?
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

b2z

  • *****
  • 7449
  • 741
  • Разраблю понемногу
Разобрался с этим примером.

А то, что он подразумевается для версии 2.5  а  я ковыряюсь с 3.6  - там нет концептуальных нововведений ?
Есть, но база такая же.

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
В нотепаде открыто 4 штуки файлов: helloworld.php - но их ещё больше, включая дубли в xml-ках.

Это такое гениальное требование движка, или можно как-то логично файлы компонента называть, допустим:
admin_point.php
admin_viev.php
admin_controller.php
admin_model.php
site_view.php
site_model.php
site_controller.php

А тож невозможно работать, когда гора файлов с абсолютно одинаковым названием.
Имей файлы логичное и понятное функциональное название - учиться и работать былоб в двадцать раз проще, а так всё упирается в идеально недогоняемую путаницу. Что? Где? Зачем?
« Последнее редактирование: 28.01.2017, 20:31:55 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
это обязательно только для точки входа. остальное называйте почти как хотите. и совсем как хотите, если их сами загружать будете, а не регистрировать автозагрузку.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Назвать то я могу их как угодно и загрузить. Но как я укажу движку - какой из них и за что отвечает ?
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
что именно? например в точке входа контроллер
Код
$classname  = 'HelloworldControllers'.ucwords(JFactory::getApplication()->input->get('controller', 'display'));
$controller = new $classname;
$controller->execute();
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Тут я не очень понимаю... Джомла по умолчанию делает инклуд ВСЕХ файлов аддона и потом в них ищет нужные функции/классы и т.п. ?
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
сначала регистрируете префикс

Код
JLoader::registerPrefix('Helloworld', JPATH_ROOT . '/components/com_helloworld');

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

*

dmitry_stas

  • ********
  • 9617
  • 929
https://github.com/sparkbuilt/lendr/tree/master/com_lendr

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

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
если совсем не хочется соблюдать соглашение о названиях классов, и называть их вообще как угодно
Логика ведь в чём ? Название файлов и классов должны быть для понятности - как можно короче, и как можно ближе к описанию их назначения и функционала.

Соглашения о названиях классов и файлов - практически идеально противоречат этой простой и логичной концепции. Что меня немного удивило... Я люблю логику с рациональностью и нелюблю создавать себе проблемы с трудностями. Ну зачем называть в 25 символов класс: HelloWorldModelHelloWorld вместо короткого и более понятного: HwModel или HwMd

Ненадо мешающей и создающей лишние проблемы - избыточности. А также ненадо десятков одинаковых файлов, названия которых совершенно ничего не говорят о их содержимом. Через месяц забудешь, начнёшь разбираться и мозги вывернутся наизнанку, а скорая не успеет с уколом от бешенства или вылечить сердечный приступ.

Также - как я понял... Сама структура MVC заточена под поточное клепание масс-продукта типа интернетМагазины для всех, в каждый дом и совершенно необязательно её придерживаться, если не хочется и нерационально ?
« Последнее редактирование: 30.01.2017, 17:07:10 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

b2z

  • *****
  • 7449
  • 741
  • Разраблю понемногу
Были бы namespace, не было бы проблем. А так как CMS создавалась на заре, когда этого не было, приходится мучаться с такими названиями. Пример выше конечно не очень красивый, там название компонента совпадает с названием сущности.

А вообще все эти названия нужны для того, чтобы автоматом подгружать классы. То есть, если Ваш компонент назвается com_mycomp, то префикс в названиях классов должен быть Mycomp. Суффиксом обычно выступает название сущности, типа Item, List, Order, Book и т.п. В итоге мы имеем классы типа MycompModelItem, MycompModelOrder и так далее.

Да, можно упростить и зарегестрировать другой префикс через registerPrefix. Но от Model не уйти, иначем MVC в Joomla работать нормально не будет.

*

dmitry_stas

  • ********
  • 9617
  • 929
Цитировать
Логика ведь в чём ? Название файлов и классов должны быть для понятности - как можно короче, и как можно ближе к описанию их назначения и функционала.
логика ведь в том, что это и есть "как можно ближе к описанию их назначения и функционала". а во вторых как уже отметили что мешает зарегистрировать префикс Hw для вашего компонента и назвать модель D? и будет класс HwModelD. перечитайте еще раз что я писал, и посмотрите еще раз компонент.

ну и еще раз обращаю внимание на то, что если вообще не хочется следовать соглашению, или оно противоречит вашему понимаю, оскорбляет ваши религиозные чувства, и так далее - инклудьте файлы самостоятельно, и называйте их как угодно. как в частности это делают разработчики VirtueMart из Индии :) это так удобно потом, разбирать что же предыдущему разработчику пришло в голову и почему класс назван HwMd. смотришь на название - и прям сразу все понятно становится :)

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

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
это так удобно потом, разбирать что же предыдущему разработчику пришло в голову
Это верное утверждение, но не всегда. Если я делаю то, что нужно исключительно мне и никому не придёт в голову разбираться с этим - то какой смысл перегружать структуру более - чем это необходимо лично мне ?

Если я делаю компонент для общественности - то конечно надо сокращать в разумных пределах, не до трёх-четырёх букв и комментов побольше писать.

Может разработчики VirtueMart не очень любят - когда в их исходниках ковыряются и перед выпуском версии - натравливают на исходники парсер для превращения понятных внутренних названий в что-то типа: HAPPYPEOPLE_GT547R7N125

Цитировать
Были бы namespace, не было бы проблем
Инклуд - с самого начала работал, делай что хочешь с любыми файлами. Объявляй любые классы.

 namespace парсит всё и сразу, а то что потом используется - и по второму разу парсит(а значит и более ресурсоёмкий), инклуд - парсит то что нужно здесь и сейчас. namespace - умножает структуру, может быть и упрощая её для некоторых - что совершенно не факт. Зато тратит лишнее вревя и ресурсы = деньги. Я инклуды с классами обычно делал динамические: надо - подключил, ненадо - нет. А зачем лишний раз грузить систему ? И непонимаю - чем бы облегчило всё это Namespace против Include  Это когда под винду пишешь - рационально подключить всё и сразу(и то не всегда), а на PHP обратная структура - таймаут и линейное программирование, которое не приветствует избыточности по причине этого самого таймаута. Чем меньше и короче - тем быстрее и ДЕШЕВЛЕ. Надо - подключил. Ненадо - НЕ подключил. Кэширование - позволяет оптимизировать.

Namespace - попытка приблизить ПХП к Вижуал Студии и ООП под винду. но ПХП - это совершенно другое, даже скорее - противоположное. Для ПХП такой подход - нерационален.
« Последнее редактирование: 30.01.2017, 18:24:10 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
Это верное утверждение, но не всегда. Если я делаю то, что нужно исключительно мне и никому не придёт в голову разбираться с этим - то какой смысл перегружать структуру более - чем это необходимо лично мне ?
я ж ни на чем не настаиваю :) более того, я почти везде пишу, что если вам так не удобно - не делайте :) делайте как удобно. случаи то разные на самом деле. кто ж вас знает, что вы пишите. может вам вообще mvc не нужен, все описать в точке входа и все. один файл - и вопросов нет. так тоже можно. com_ajax тому яркий пример. смотря какие задачи.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
И тут возникает вопрос: в  самом компоненте точка входа остаётся со стандартным названием и с ней всё нормально, точка входа компонента в папке site - меняет своё имя и загружается при инсталле компонента. Но как Joomla указать - что это и есть точка входа - просто с другим именем ? В мануалах так и не нашёл спецификации о переназначении имён и файлов компонента.

com_lendr я посмотрел, но неувидел ничего похожего, иль непонял...
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
в  самом компоненте точка входа остаётся со стандартным названием и с ней всё нормально, точка входа компонента в папке site - меняет своё имя и загружается при инсталле компонента.
не очень понятно разница между "в  самом компоненте" и "в папке site"
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
В корневой папке компонента, основная точка входа с именем: componentname.php

Для предствавления на сайте, точка входа - как я понимаю, в папке: site и тоже с именем  componentname.php
Вот эту последнюю в папке site(и все остальные по идее) и надо подсунуть Joomla с изменённым именем comnm.php - как точку входа. По умолчанию Joomla её не подхватывает.

JLoader::registerPrefix - регистрирует как я понял, отдельные внешние классы, но не объявляет Joomla точки входа. По идее должны быть указатели для XML файла-установщика, которые говорят движку что вот такой-то файл компонента: контроллер для сайта, такой-то: точка входа, такой-то: для шаблона админки, вида и т.д.... Но либо этих указателей не задумано, либо я не нашёл.
« Последнее редактирование: 30.01.2017, 21:22:10 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
я так и не понял что такое "В корневой папке компонента". корневая папка это есть /components/com_yourcomp или /administrator/components/com_yourcomp для админ панели. но в любом случае вариант переопределить файл /components/com_yourcomp/yourcomp.php только один - назовите ваш компонент по другому, и будет по другому - /components/com_comnm/comnm.php
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

robert

  • ********
  • 4002
  • 371
Что значит
По умолчанию Joomla её не подхватывает.
? А что будет выводиться, если наберете site.ru/index.php?option=com_comnm ?
site.ru/ и site.ru/administrator/ - это 2 разных, независимых друг от друга сайта с 1 общей БД.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
я так и не понял что такое "В корневой папке компонента"
Это я неправильно сказал конечно. Имел ввиду папку - в состоянии перед инсталляцией. Когда в одной папке все файлы, которые редактируешь, а потом обновляешь в Joomla компонент, со страницы Инсталляции Из этого Фолдера.

Цитировать
А что будет выводиться, если наберете site.ru/index.php?option=com_comnm ?
Идея интересная - поменял имена, переинсталлил, попробовал, но не работает. Потому как само название компонента - не меняется, а это указатель на папку - но не на точку входа. Меняются только имена внутренних файлов(MVC и точек входа) на другие, но Joomla ищет дефолтные имена(componentname.php/xml) - а я незнаю как ей сообщить о их замене на другие имена.

Maybe - Drupal rulez ?
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

robert

  • ********
  • 4002
  • 371
Maybe - Drupal rulez ?
Stop fu..ing flossing, OK?
Если вы такой "любознательный", почему вам не открыть корневая_папка/index.php и посмотреть дальше по цепочке, как все работает? Респект, b2z и dmitry_stas: как вы нашли время на такие извращения?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
Если вы такой "любознательный"
Ну я просто с детства - логичен и рационален. За что меня все в основном и ненавидят. Но яж в этом - невиноват ? Хотя и могу вылечиться - упав на асфальт вниз головой. Но чёто нетянет...

Мне надо так, чтобы не создавать СЕБЕ проблемы СЕЙЧАС, которые потом в будущем придётся решать в сто раз труднее. Начинать надо всегда хорошо.
Цитировать
как вы нашли время на такие извращения?
Хочу заметить - это не извращения, а разумный подход к проектированию системы. Я кагбы не лось и пару своих тупых движков писал. Безсмысленных и беспощадных, но это коечто прибавило... Поэтому сейчас и тщательно выбираю на будущее.

Цитировать
Stop fu..ing flossing
А как это переводится ? Ато я кроме мануалов - ничего не читал.... Все три слова понятны - но они неувязываются вместе.

Цитировать
и посмотреть дальше по цепочке
Не держите меня за лоха - Нету никакой цепочки.
« Последнее редактирование: 31.01.2017, 00:33:18 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

robert

  • ********
  • 4002
  • 371
Ну я просто с детства - логичен и рационален.
Две части одного расширения: в админке она называется componentname, а на фронте - commnm. Какая тут логика и рациональность? Сумбур и путаница!
Я кагбы не лось и пару своих тупых движков писал.
Тогда какого черта вы тут задаете такие вопросы?
открыть корневая_папка/index.php и посмотреть дальше по цепочке, как все работает

А как это переводится ?
Если до сих пор не знаете, то и не надо: ничего хорошего там нет.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
Тогда какого черта вы тут задаете такие вопросы?
Я знаю ПХП, но мне абсолютно неизвестна глубина - глубин, заложенная разработчиками J. Вот и задаю.

Можно - да ? : - )))
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут

*

dmitry_stas

  • ********
  • 9617
  • 929
Ну я просто с детства - логичен и рационален
быть может это только вам так кажется? :) ибо я например не вижу ничего рационального в том, чтобы ломать принципы движка и не пользоваться тем, что уже есть. не вижу смысла не следовать соглашению имен, и выдумывать пусть даже очень логичные для вас названия классов хотя бы потому, что эти они по хорошему в чистом виде нигде кроме как в самом названии класса больше и не используются.

Мне надо так, чтобы не создавать СЕБЕ проблемы СЕЙЧАС, которые потом в будущем придётся решать в сто раз труднее.
если вам интересно мое мнение - то имхо вы сейчас занимаетесь как раз обратным. ищите сейчас приключения, чтобы в будущем их мужественно преодолевать :)

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

*

антигерой

  • ***
  • 30
  • 0
  • Вечный Странник
Цитировать
хотя бы потому, что эти они по хорошему в чистом виде нигде кроме как в самом названии класса больше и не используются.
А если возникнет необходимость - годами копаться и мелочи в формулах и всякую фигню допиливать ? Один раз сделал и забыл - да чудесно. Но...
Цитировать
потому, что эти они по хорошему в чистом виде нигде кроме как в самом названии класса больше и не используются
Я так всегда делал, удобно - когда в названии файла содержится смысл функций, что в нём описаны. Я не буду подругому работать.
Цитировать
может быть стоит отказаться от Joomla в таком случае?
Товарищ - друпал советовал. Придётся изучать.
Цитировать
Страшно подумать о ваших движках
Да мне тоже : - )))
« Последнее редактирование: 31.01.2017, 00:58:43 от антигерой »
Чем ярче горят мосты за спиной, тем светлее дорога впереди
Не расстраивайся из-за людей - мешающих по ней идти. Они все умрут