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

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Информация по написанию компонента
« Ответ #120 : 30.07.2009, 23:16:19 »
Тут дело не в MVC, тут дело в joomlaвских примочках. Не понятно за что каждая отвечает и зачем это вообще надо, почему так а не по другому.
Есть ядро и нужно знать как к нему правильно прицепиться.

Лучший способ изучения программирования в конкретной среде - это работа по примеру.
Берем простой компонент и смотрим, как он устроен, читаем документацию для разработчиков на сайте Joomla, и все получается.
Очень рекомендую компонент EasyCreator, который создает для вас рабочие шаблоны расширений, которые можно потом допиливать под ваши нужды и учиться на их примере.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Информация по написанию компонента
« Ответ #121 : 30.07.2009, 23:21:08 »
Тут дело не в MVC, тут дело в joomlaвских примочках. Не понятно за что каждая отвечает и зачем это вообще надо, почему так а не по другому.
Есть ядро и нужно знать как к нему правильно прицепиться.
ЗЫ а API тогда зачем?

Очень рекомендую компонент EasyCreator, который создает для вас рабочие шаблоны расширений, которые можно потом допиливать под ваши нужды и учиться на их примере.
полезная штучка. не знал чего-то про нее, все ручками писал. спс
« Последнее редактирование: 30.07.2009, 23:29:21 от SmokerMan »
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #122 : 31.07.2009, 01:04:36 »
а API тогда зачем?
оно-то есть, а толку от него, как от козла молока.
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Информация по написанию компонента
« Ответ #123 : 31.07.2009, 04:57:47 »
$mainframe->close();
die();

У тебя в подписи глючок :)
$mainframe->close() вызывает die. Второй не нужен :)
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #125 : 31.07.2009, 19:44:32 »
У тебя в подписи глючок :)
$mainframe->close() вызывает die. Второй не нужен :)
АААА! обратил внимание?   ;)
Сработало!  yes!

зы. это не глюк. это намеренно допущенная очепятка   *DRINK*
там не зря написано именно DIE, а не EXIT....
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #126 : 01.08.2009, 19:27:25 »
А мне вот интересно, создают ли в каких-нибудь форумах физиков темы про документацию на постройку, например лазера?
Казалось бы, что проще - прочитал книжку, купил материалы, собрал дома лазер киловатта на четыре.

Почему вам, уважаемые начинающие, кажется, что вы все поймете, прочитав книжку или статью?
Для профильно образованного человека, документации, необходимой и достаточной для написания чего угодно под Joomla - пруд пруди.
А для того, кто не знает, что такое MVC, что такое модель данных, да и собственно PHP не знает, есть два пути.
Первый путь - выучить сначала основы и принципы написания программ, а второй - обратиться со своими задачами к специалистам.
А с наскока, все, что можно сделать - это научиться писать ***код. А этого добра и так навалом.

Чушь. Не убедили. Писать ***код по неопытности никогда не приходилось? И почему с наскока? Всему свое время. О путях не спорю, каждый выбирает в меру своего разумения и не только перечисленные. О профильно образованных ничего не скажу, поскольку образованный не профильно. ;D  А вот о документации, которой пруд пруди, явно погорячились. Нормального, а главное полного, описания API нет. Не дело, когда чтобы понять какие переменные и каких типов передать функции, нужно в исходники лезть.

оно-то есть, а толку от него, как от козла молока.

Лучший способ изучения программирования в конкретной среде - это работа по примеру.
Берем простой компонент и смотрим, как он устроен, читаем документацию для разработчиков на сайте Joomla, и все получается.

Почему только этот.  :o Способов получения информации множество и ограничиваться только одним не стоит.

Эт че за пессимизм (( ? Надо продолжать. По этой теме вообще больше никто не пишет. Мануала нормального по написанию компонентов 1.5  вообще нет. Только на допотопных примерах.
P.S. Не понимаю почему админы не поддерживают твою инициативу!!!!!!

 ;D Это не пессимизм, а обдумывание стоит ли тратить время, которое можно потратить с большей пользой, в том числе и для себя. А админы здесь не причем. Если тема востребована, она и так всплывет. И зависит это от интереса сообщества.

Думаю стоит продолжить, потому что, из всего написанного здесь гуру, можно извлечь вполне пригодную для использования информацию.  yes! Например:

userxp обратил внимание на  JString и mainframe. JString отвечает на вопрос, почему  получаются кракозябры вместо кириллицы, при правильной кодировке файла и базы данных. Комментарий о mainframe натолкнул не мысль, что стоит разобраться, в чем разница с JFactory::getApplication.
заменить на JString::strtoupper
это UTF-8. могут быть нюансы.
опшн через глобал, зато мейнфрейм - пожалте, переопределяем.
это как минимум странно...
$mainframe = JFactory::getApplication() - это где? фронт? админка? кхм...
mainframe является единой глобальной переменной, соотв. global $mainframe.
а $option = JRequest::getCmd( 'option' );
Понял кажется в чем разница. Когда global $mainframe; берем уже готовые данные из переменной, а когда $mainframe = JFactory::getApplication(); создается лишний экземпляр класса, лишняя нагрузка.
Если не прав поправьте.
Возражений не поступило.

shprota подал мысль, что не нужно пользоваться все время одной функцией запроса к базе данных типа SELECT *, а для каждой задачи делать более мелкий запрос и извлекать только действительно нужные данные, а не все сразу.
Например, если вам не нужны все поля, не нужно делать "SELECT *" чтобы не тянуть лишнюю информацию, не нужно делать сложные джойны, чтобы запрос исполнялся быстрее.
Ну и, разумеется, надо помнить, что запросы на изменение данных в базе исполняются довольно долго, в отличие от запросов на выборку данных.

Есть ссылки по выбору и настройке IDE, хотя после испробования, согласился с userxp
а я не юзаю ни Zend, ни эклипс, ни бинс.. и вааще не юзаю отладчиков   :-*  ;D
и вернулся  к привычному PHP Expert Editor-у который использую просто как удобный редактор кода.

Даже  эта шутка заставила задуматься.  ;D
У тебя в подписи глючок :)
$mainframe->close() вызывает die. Второй не нужен :)
АААА! обратил внимание?   ;)
Сработало!  yes!
зы. это не глюк. это намеренно допущенная очепятка   *DRINK*
там не зря написано именно DIE, а не EXIT....

exit ('Это exit');
die ('Это die');
$mainframe->close('Это close');
Дают один и тот же эффект, в чем разница?
Мало того close это и есть exit и почему $code integer

// @param    int    Exit code
    
function close$code ) {
        exit(
$code);
    }

http://www.php.ru/manual/function.exit.html
http://www.php.ru/manual/function.die.html
 ;D

Перечисленное оправдывает потраченное время. Поэтому продолжим.

« Последнее редактирование: 01.08.2009, 20:00:02 от Lex »
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #127 : 01.08.2009, 19:29:16 »
Так. Забыл уже на чем остановились. Дерево для админки допилил. Проблемы решил просто. В выпадающем списке выбора родительской категории, все подчиненные для редактируемой категории сделал недоступными для выбора. При удалении,  категория, имеющая подчиненные, просто не удаляется с выдачей соответствующего сообщения. Добавил файл перевода. Добавил поле выбора картинки и поле ее показа в списке категорий. Включил отладку Joomla, нашел проблемные SQL запросы, поправил. Нашел баг. Когда переходишь на вторую страницу списка категорий и выбираешь показать «Все» в выпадающем списке пагинатора, список категорий вообще пропадает. Причину пока не нашел.  :(
Описывать не буду, можно посмотреть, компонент в аттаче. Если есть замечания, буду рад услышать. От гуру и по делу, в любой форме, даже матом.  ;D

Подумав, решил не выкладывать сюда куски кода, а делать описание прямо в коде компонента и приаттачивать файлы. Сейчас описаний пока нет, вот этим в дальнейшем и займусь, чтобы каждая строка кода имела комментарий для чего, что, как и зачем. Надо было сразу так сделать, не догадался, хотя и говорили.  crazy!
Здоров, наприпер мне удобнее сперва глянуть код, а потом читать объяснения. Если можешь, пакуй для новичков zip файл компонента как атачмент. Это пожелание, а так хорошо написано


[вложение удалено Администратором]
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Motor

  • Осваиваюсь на форуме
  • 49
  • 0 / 0
Re: Информация по написанию компонента
« Ответ #128 : 01.08.2009, 19:55:09 »
Отличненько ^-^ Тема ожила )))!!!!
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #129 : 02.08.2009, 05:47:26 »
Понял кажется в чем разница. Когда global $mainframe; берем уже готовые данные из переменной, а когда $mainframe = JFactory::getApplication(); создается лишний экземпляр класса, лишняя нагрузка.
Если не прав поправьте.
поправляю :)
Это singletone, потому экземпляр класса будет создан только в том случае, если он не был создан до этого
иначе говоря, если на фронте компонента написать global $mainframe; или $mainframe =& JFactory::getApplication('site'); то это будет означать абсолютно одно и то же :)

Хотя все же рекомендую пользоваться первым вариантом, если только у вас нет необходимости вызвать свой специфический $mainframe для своих целей. В этом случае можете использовать свой идентификатор клиента


Даже  эта шутка заставила задуматься.  ;D
exit ('Это exit');
die ('Это die');
$mainframe->close('Это close');
Дают один и тот же эффект, в чем разница?
Мало того close это и есть exit и почему $code integer
ну начнем с того, что DIE и EXIT - синонимы, т.е., они АБСОЛЮТНО идентичны.
я же сделал акцент на слове DIE (ну прочтите внимательно, что я написал!), просто потому что это слово DIE :) - возьмите англо русский словарь  ;D
это шутка  и не имеет отношения к коду  :laugh:
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Информация по написанию компонента
« Ответ #130 : 02.08.2009, 05:54:19 »
Хотя все же рекомендую пользоваться первым вариантом, если только у вас нет необходимости вызвать свой специфический $mainframe для своих целей.

А действительно ли лучше пользоваться "legacy" глобальной переменной? Я вот не уверен, останется ли она в версии 1.6 или 1.7 или 2.0...
Новая Joomla проповедует истинно-паттерновый подход и, наверное, лучше использовать singleton вместо глобальной переменной.
Впрочем, я сам грешен - пользуюсь $mainframe :)
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #131 : 02.08.2009, 05:58:43 »
кстати, насчет option - он не всегда бывает определен, потому при написании компонента, я бы лучше не полагался на URL
если вы планируете написание модулей к компоненту, то использование модуля может быть вне страницы с компонентом, потому прямое исопльзование option из URL я считаю неуместным.
лучше написать некий definder, который бы производил все необходимые вычисления для переменных и был бы универсального применения. таким образом его можно было бы легко подключать в внутри модуля/плагина или самого компонента, не задумываясь об правильности этих переменных.
это, конечно, чуть больше напрягает вычисления, но ведь этого не придется делать миллионы раз, а всего один за прогон страницы
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #132 : 02.08.2009, 06:02:19 »
Я вот не уверен, останется ли она в версии 1.6 или 1.7 или 2.0...
Новая Joomla проповедует истинно-паттерновый подход и, наверное, лучше использовать singleton вместо глобальной переменной.
останется до тех пор ,пока они что-то не сделают с getApplication('site')
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Информация по написанию компонента
« Ответ #133 : 02.08.2009, 06:05:50 »
останется до тех пор ,пока они что-то не сделают с getApplication('site')

Не понял связи. А что они должны с этим сделать? Я просто имею в виду, что отказ от глобальных переменных - это теоретически благо.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #134 : 02.08.2009, 06:08:49 »
только теоретически.
вот будешь ты везде писать getApplication('site'), а они хопа! и завтра поменяют на getApplication('front-end')
и чо ты будешь делать?

зы. тебе же ведь ну совсем ничто не мешает нарисовать прослойку что-то типа $mainframe =& Me::__beCool();

и не пользуйся global... :)
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Информация по написанию компонента
« Ответ #135 : 02.08.2009, 06:13:10 »
вот будешь ты везде писать getApplication('site'), а они хопа! и завтра поменяют на getApplication('front-end')
и чо ты будешь делать?

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

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #136 : 02.08.2009, 06:21:12 »
я их давно хочу повесить, но если они еще и так поступят, то четвертования им не избежать...
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #137 : 02.08.2009, 12:38:11 »
поправляю :)
Это singletone, потому экземпляр класса будет создан только в том случае, если он не был создан до этого
иначе говоря, если на фронте компонента написать global $mainframe; или $mainframe =& JFactory::getApplication('site'); то это будет означать абсолютно одно и то же.
Хотя все же рекомендую пользоваться первым вариантом, если только у вас нет необходимости вызвать свой специфический $mainframe для своих целей. В этом случае можете использовать свой идентификатор клиента

Угу. Сколько раз это видел и не только для  JApplication и не дошло.
Цитировать
Returns a reference to the global JApplication object, only creating it if it doesn't already exist.

ну начнем с того, что DIE и EXIT - синонимы, т.е., они АБСОЛЮТНО идентичны.
я же сделал акцент на слове DIE (ну прочтите внимательно, что я написал!), просто потому что это слово DIE :) - возьмите англо русский словарь  ;D
это шутка  и не имеет отношения к коду  :laugh:

Зато кое-что узнал.  ^-^ Там ссылочки есть. А об английском глаголе не подумал даже. ;D

Откомментировал контроллер, надеюсь понятно. Комментариев много больше чем кода. Разобрал по параметрам
некоторые методы JHTMLSelect. Оption, genericlist, booleanlist. Это к вопросу построения списков средствами JHTML.
Ну и еще кой чего по мелочам.  ^-^ В архиве. Прицепил.

[вложение удалено Администратором]
« Последнее редактирование: 02.08.2009, 12:54:07 от Lex »
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #138 : 08.08.2009, 18:25:34 »
Прокомментировал входной файл, модель и представление. Добавил поле "доступ", но для этого пришлось
изменить модель, поэтому целиком компонент прицепил. При удалении, компонент не удаляет таблицу.
Нужно руками удалить или заменить файлы установленного, файлами из архива. Просто поверх старых.
Осталось только функция check и вывести все на форнтэнд. ТЗ будет выполнено. ;D
И так пишем компонент для J 1.5. Каталог чего-нибудь. Неограниченная вложенность категорий для начала.

P.S. Сейчас удаляет.

[вложение удалено Администратором]
« Последнее редактирование: 08.08.2009, 20:17:20 от Lex »
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #139 : 08.08.2009, 19:35:09 »
При удалении, компонент не удаляет таблицу.
а чо так?
допиши в XML uninstall секцию и туда запрос на DROP TABLE IF EXIST
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Информация по написанию компонента
« Ответ #140 : 08.08.2009, 20:03:30 »
Дописал. Поленился чего-то. Прикрепил к предыдущему посту.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

Darkick

  • Завсегдатай
  • 1142
  • 239 / 1
Re: Информация по написанию компонента
« Ответ #141 : 08.08.2009, 21:24:32 »
Version 1.6 Developer Notes
Так что от global $mainframe стоит уже сейчас отказываться.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #142 : 08.08.2009, 22:34:29 »
ну вот то ,что мы как раз обсуждали недавно. они убрали определение клиента вовнутрь.

2 Darkick: прежде чем рекомендовать, попробовал бы сам - вызов JFactory::getApplication() в 1.5 по-умолчанию приведет вызову копии $mainframe с другими настройками
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Информация по написанию компонента
« Ответ #143 : 08.08.2009, 23:29:32 »
зы. щас посмотрел код. дело не в вызове getAplication
просто mainframe-а больше нет. он теперь $app, при том, что getAplication вызывается по старому - с указанием клиента

честно говоря, пока не понимаю, зачем это сделано.
видимо хотят исключить любые возможные трансформации со старых версий компонентов
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Blockhead

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Re: Информация по написанию компонента
« Ответ #144 : 20.08.2009, 10:26:40 »
Всем привет, почитал статьи возникли вопросы:

Что такое и как с этим работать:
JText::
JRequest::
JError::
JPane::
JRoute::
JFactory::
JHTML::
и т.д.
Где найти список и русское пояснение?

Как работать с переменными:
$this->
$view->
и т.д.
Где посмотреть список переменных, и как с ними работать?

Написание компонента конечно дело хорошее, но вот вы всёж не с самого нуля начали, описание функционала пошагово каждого шага, а тут код в кучу и сиди гадай на кофейной гуще, что и как работает. >:(
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #145 : 20.08.2009, 10:32:59 »
Что-то можешь найти у меня. Статьи планирую пополнять на регулярной основе.

Всё на сайте Joomla! 1.5 API

Ну и конечно же на Joomla! Docs
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Информация по написанию компонента
« Ответ #146 : 20.08.2009, 12:59:39 »
Кстати тока недавно нашел API на локалку. Заметно выгоднее работать  ^-^
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: Информация по написанию компонента
« Ответ #148 : 20.08.2009, 14:09:22 »
а чего пояснять то  ^-^.
API сделано все как у них на сайте, только ставится на Apache на локалке.
Не знаю конечно кто и как это достал и выложил (может и спи...), но мне от этого не худо не бедно  ^-^.
Поэтому здеся ссылками не буду делиться. Скажу только что нашел через гуглю.
Удобно всегда доступно и быстро.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Информация по написанию компонента
« Ответ #149 : 20.08.2009, 14:12:46 »
а чего пояснять то  ^-^.
API сделано все как у них на сайте, только ставится на Apache на локалке.
Не знаю конечно кто и как это достал и выложил (может и спи...), но мне от этого не худо не бедно  ^-^.
Поэтому здеся ссылками не буду делиться. Скажу только что нашел через гуглю.
Удобно всегда доступно и быстро.
Понятненько... Ну у меня инет быстрый + не лень зайти на страничку :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При попытке войти в админку 404 ошибка компонента

Автор omezik

Ответов: 4
Просмотров: 2397
Последний ответ 31.08.2019, 22:41:46
от Taatshi
Вывод компонента в качестве модуля

Автор fMichail

Ответов: 4
Просмотров: 2967
Последний ответ 06.08.2014, 15:16:29
от anar4ik
Переменные, доступные из любого компонента

Автор Serjo_man

Ответов: 3
Просмотров: 1522
Последний ответ 03.02.2014, 05:22:00
от Arkadiy
Работа компонента Ninja RSS 1.1.11 на Joomla 1.5.26

Автор Adam.K

Ответов: 1
Просмотров: 1433
Последний ответ 16.12.2013, 21:26:31
от Adam.K
Доработка компонента - нужна помощь

Автор wfire

Ответов: 5
Просмотров: 1353
Последний ответ 24.09.2013, 13:17:28
от robert