Форум русской поддержки Joomla!® CMS
03.12.2016, 19:45:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как найти файл с функцией-обработчиком нажатия кнопки?

 (Прочитано 2508 раз)
0 Пользователей и 1 Гость смотрят эту тему.
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« : 27.05.2013, 16:13:43 »

Здравствуйте.

Кнопка Сохранить располагается в структуре, приведенной во вложении.

Как в например Chrome ищется файл с функцией, которая начинает отрабатывать первой по нажатию этой кнопки?

Нашел в index.php вот такой код:
Код:
<script type="text/javascript">

//<![CDATA[
Joomla.submitbutton=function(a){
var options = { path: '/', expires: 2}
if (a == 'apply') {
var idx = jQuery('#tabs li.current').index();
jQuery.cookie('vmapply', idx, options);
} else {
jQuery.cookie('vmapply', '0', options);
}
jQuery( '#media-dialog' ).remove();
Joomla.submitform(a);
};
//]]>...
Только не понимаю, как искать дальше и на тот ли след я напал Azn
Где-то по цепи запускается SQL запрос, который надо найти и изменить

Благодарю


* обработчик кнопки.jpg (34.02 Кб, 535x178 - просмотрено 166 раз.)
« Последнее редактирование: 27.05.2013, 16:29:57 от borro » Записан
varX
Живу я здесь
******

Репутация: +102/-3
Offline Offline

Сообщений: 1457


разработка компонентов


« Ответ #1 : 27.05.2013, 16:59:06 »

Вы браузером серверные функции пытаетесь искать, я правильно понял?
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #2 : 27.05.2013, 17:02:14 »

Вы браузером серверные функции пытаетесь искать, я правильно понял?
вот это мысль Azn может и так. не знаю как докопаться до места, которое формирует UPDATE запрос к БД. У вас есть идеи?
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #3 : 27.05.2013, 17:03:43 »

Если это действительно тот скрипт, который обрабатывает клик, то смотрите куда передается форма т.к. скрипт просто передает фому куда она просится. Чтобы проверить тот-ли это скрипт, поставьте во вкладке "Скрипт" FireBug стоп где-нибудь в этом скрипте, если стоп сработает - значит скрипт тот.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #4 : 27.05.2013, 17:44:54 »

Похоже мне надо научиться пользоваться каким-нибудь IDE. NetBeans?
Записан
varX
Живу я здесь
******

Репутация: +102/-3
Offline Offline

Сообщений: 1457


разработка компонентов


« Ответ #5 : 27.05.2013, 17:50:27 »

Похоже мне надо научиться пользоваться каким-нибудь IDE. NetBeans?

Это уже подает надежды. Но я бы рекомендовал блокнот.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #6 : 27.05.2013, 17:53:23 »

Это уже подает надежды. Но я бы рекомендовал блокнот.
я посмотрел - никаких хранимых процедур, триггеров, функций в базе нет. значит UPDATE запрос генерится в файлах?
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #7 : 27.05.2013, 18:07:58 »

Где-то по цепи запускается SQL запрос, который надо найти и изменить
Скорее всего в недрах JDatabaseTable (libraries/joomla/database/table.php), но это функция ядра. А перед тем, как оно будет вызвано - вызовется контроллер из /components/com_mycomponent/ (или /administrator/components/com_mycomponent), где mycomponent - название компонента.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #8 : 27.05.2013, 20:22:51 »

Если собрать все скрытые инпуты и action формы то в 99% случаев эта информация исчерпывающе показывает на файл и функцию к которому(которой) форма обращается.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #9 : 28.05.2013, 10:04:04 »

Скорее всего в недрах JDatabaseTable (libraries/joomla/database/table.php), но это функция ядра. А перед тем, как оно будет вызвано - вызовется контроллер из /components/com_mycomponent/ (или /administrator/components/com_mycomponent), где mycomponent - название компонента.
Здравствуйте. Смотрел урок от Lynda.com по написанию расширений под Joomla. Наверно от слабого английского плохо понял. Вы бы могли посоветовать русскоязычное видео или текст, по которому можно понять состав, функцию и последовательность взаимодействия основных программных частей/модулей(хелперы и пр.) Joomla?

Похоже нашел функцию, которая записывает данные в БД:
function save($data = 0) в файле vmcontroller.php
Думаю в ней поставить debug_backtrace, чтобы добраться до места, где запросы генерятся. Почему-то если в ее теле использую var_dump(), не видно его вывода в админке, как будто новая страница загружается и не успеваю увидеть вывода. Есть ли в php команда "СТОП"? Думаю все-таки в IDE это правильнее делать
« Последнее редактирование: 28.05.2013, 10:29:27 от borro » Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #10 : 28.05.2013, 10:48:50 »

die();
exit;
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #11 : 28.05.2013, 12:31:20 »

die();
exit;
Благодарю.
поставил NetBeans, создал проект, указав папку локального сайта. Нажимаю Отладка проекта - запускается фронтенд сайта со довесом XDEBUG_SESSION_START=netbeans-xdebug в адресной строке, но при этом  в NetBeans все время бегает ползунок о том, что NetBeans все ожидает подключения и никак не подключится. Похоже Неправильно настроил. Посоветуйте пожалуйста статью как отлаживать под NetBeans локальный сайт. Не нашел. Хотя можно и по любой другой IDE.
« Последнее редактирование: 28.05.2013, 14:12:47 от borro » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #12 : 28.05.2013, 14:04:07 »

Если поставите PhpStorm то расскажу как настроить отдадку в нем ) нетбиносом уже давно не пользуюсь... уж очень он слабый стал по сравнению с штормом!
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

Пол: Мужской
Сообщений: 6850


снова дома...


« Ответ #13 : 28.05.2013, 14:08:27 »

уж очень он слабый стал по сравнению с штормом!
+100500
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #14 : 28.05.2013, 14:10:03 »

Если поставите PhpStorm то расскажу как настроить отдадку в нем ) нетбиносом уже давно не пользуюсь... уж очень он слабый стал по сравнению с штормом!
закачиваю 5 версию в надежде не сильно перегрузить мою слабую рабочую машину. Можете начать рассказывать Azn
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #15 : 28.05.2013, 17:04:42 »

Все очень просто )
1. Создаем проект (достаточно просто нажать open directory и указать папку с сайтом на локале)
2. как проект прогрузился на панели инструментов  нажимаем на стрелочку

и там появится "Edit Configuration..." нажимаем по нему
3. увидим такое окошко в  нем в самом верху нажимаем на плюсик и выбираем "PHP Web Application"

4. появится окошко в котором вводим название проекта в поле "Name"
5. В поле Server есть кнопочка с тремя точками нажимаем на неё появится ещё одно окошко которое надо нажать на кнопку плюс и заполнить приблизительно так:

тоесть в поле host указываете путь к сайту который вы набираете в браузере у вас может быть localhost просто например! и нажимаем кнопку ок!
в предыдыщем окне должно стать так:

дописываем в поле "Start URL" после слеша index.php и нажимаем окей! настройка завершена!

дальше ставим точку остановки

и жмем по кнопке с тараканом (Debug или Run->debug или shift f9)
Если все настроенно правильно(Xdebug)
то сайт зависнет (как только перейдет к выполнению этой точки остановик), как будто не может загрузится и должен замигать phpStorm
после этого наш редактор станет таким:

при наведение на переменные до точки остановки, через несколько секунд, будет вылетать окошко где можно посмотреть их значение
ну и плюс в окошке Variables можно это посмотреть!
« Последнее редактирование: 28.05.2013, 17:18:03 от Istaan » Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #16 : 05.06.2013, 12:05:10 »

Здравствуйте.
Когда запускается отладка возникает сообщение
Цитировать
C:\xampp\php\php.exe C:\xampp\htdocs\antilopa2\administrator\components\com_virtuemart\helpers\vmcontroller.php
Fatal error: Call to undefined function jimport() in C:\xampp\htdocs\antilopa2\administrator\components\com_virtuemart\helpers\vmcontroller.php on line 21
Call Stack:
    0.0011     444936   1. {main}() C:\xampp\htdocs\antilopa2\administrator\components\com_virtuemart\helpers\vmcontroller.php:0
Process finished with exit code 255
PHPStorm 6. В чем может быть причина? Может нельзя напрямую отлаживать vmcontroller.php, а надо поставив точку останова в vmcontroller.php запускать index.php сайта?

также хочу спросить, как понимать что entity is depricated? - много методов перечеркнуто при просмотре php кода
« Последнее редактирование: 05.06.2013, 13:47:39 от borro » Записан
SDKiller
Dev Team
******

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #17 : 05.06.2013, 13:40:36 »

Вот давно бы нашли уже )

Joomla.submitform($a) отправляет форму с task=$a - в вашем случае 'apply'

По action формы посмотрите - в какой контроллер будет передаваться этот task

В контроллере в функции registerTask ищите какой на самом деле метод сопоставлен 'apply'

А уж в этом методе контроллера будет большая вероятность найти ваш update запрос (ну или хотя бы отследить выполнение далее до модели или таблицы).


Полагаться на отладку Joomla-проектов в IDE не стОит - некоторые специфические методы автозагрузки классов IDE могут не понять.
Тот же PhpStorm не предложит вам ничего для объекта полученного через J...::getInstance() - если только вы явно в phpdoc-е не укажете тип объекта, который получаете.
Хотя многие фреймворки он нативно поддерживает, тот же Yii
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #18 : 05.06.2013, 14:00:11 »

Благодарю. C вами так и до просветления недалеко Azn
в action формы стоит "index.php". раз кнопка стоит в админке, то это файл /administrator/index.php?
В контроллере в функции registerTask ищите какой на самом деле метод сопоставлен 'apply'
Получается файл контроллера - это /administrator/index.php? Там нет registerTask
« Последнее редактирование: 05.06.2013, 14:06:18 от borro » Записан
SDKiller
Dev Team
******

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #19 : 05.06.2013, 14:26:56 »

в action формы стоит "index.php"...

Ну гляньте hidden инпуты в конце формы - там будут или controller или view
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #20 : 05.06.2013, 14:56:01 »

Ну гляньте hidden инпуты в конце формы - там будут или controller или view

да, нашел, "product" там было. верно пали подозрения на vmcontroller.php, die() помог это понять, надо не бояться его применять.
В этом файле есть функция $model->store($data);
Погружаюсь далее и видимо в vmmodel.php...

Поклон!
« Последнее редактирование: 05.06.2013, 15:06:03 от borro » Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #21 : 05.06.2013, 17:21:50 »

В функции save файла vmcontroller.php есть строки

Код:
...
$model = VmModel::getModel($this->_cname);
$id = $model->store($data);
...
Если открыть файл administrator/components/com_virtuemart/helpers/vmmodel.php, то в нем есть определение функции store. Если в ней ставлю exit() или die(), то ничего не происходит.
Вопрос, если происходит инициализация объекта класса VmModel:
Код:
$model = VmModel::getModel($this->_cname);
, то изменения в одном из его методов(добавил в функцию store код:
Код:
var_dump($data);
die();
)
должны изменять ход выполнения строки
Код:
$id = $model->store($data);
а именно останов выполнения функции?
« Последнее редактирование: 05.06.2013, 17:26:51 от borro » Записан
SDKiller
Dev Team
******

Репутация: +325/-5
Offline Offline

Пол: Мужской
Сообщений: 2749


...ergo sum


« Ответ #22 : 05.06.2013, 18:11:03 »

Вам надо искать конкретную модель, которая инициализируется в данном контексте, а не абстрактную vmmodel
Так что надо выяснить что у вас в $this->_cname для начала - и смотреть фукнцию store этой модели.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1150


желаю вам счастья


« Ответ #23 : 17.06.2015, 14:40:45 »

Ну гляньте hidden инпуты в конце формы - там будут или controller или view
Здравствуйте.
Волею судеб снова надо разобраться с тем, что происходит после нажатия этой кнопки Сохранить.
Если бы я тогда ответил Вам, что там в скрытом инпуте стоит
<input type="hidden" name="view" value="product">
Какой файл Вы бы посоветовали искать тогда далее чтобы вести отладку?  Smiley Вообще дело, как вы может быть поняли, происходит в админке VirtueMart при редактировании карточки товара
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet