<<<1...5...10...32333435363738>>>
Принимаем вопросы от населения
webitproff |
|
---|---|
#46726 Dayver: Павел, а с этим не подскажите? if ($env['ext'] == 'users' && $_GET['m'] == 'register') чтобы подключить на конкретной странице ? аккаунт удален - не срослось с разработчиками
ушел на другой движок |
Dayver |
|
---|---|
#46727 webitproff: Для проверок в коде подключаемом через хуки в модуле пользователей подошёл бы код if ($env['ext'] == 'users' && $m == 'register') Но из-за того что код выполняющися через хук rc вызывается ранеее в common.php то и переменные $env['ext'] и $m еще пусты потому нужно через озвученую выше связку проверок: if (isset($_GET['e']) && $_GET['e'] == 'users' && isset($_GET['m']) && $_GET['m'] == 'register') только для того что бы не было предупреждений генерируемых PHP8 нужно добавить проверки isset (как показано выше) или !empty - в зависимости от конкретной ситуации Pavlo Tkachenko aka Dayver
|
webitproff |
|
---|---|
#46728 Dayver:#46727 webitproff: четко! работает на 8.1 Очень благодарен! давно копался с этим аккаунт удален - не срослось с разработчиками
ушел на другой движок |
Dayver |
|
---|---|
#46724 Kabak: И замечание номер четыре. Ваш плагин даже после проделанных манипуляций не будет работать у других потому что код инициализации $("section.div_block_register input[name=rusername]").after(... $("section.div_block_register input[name=ruseremail]").after(... $("section.div_block_register input[name=rusername]").blur(.... $("section.div_block_register input[name=ruseremail]").blur(... использует селекторы section.div_block_register которые присутствуют только в вашей индивидуальной теме сайта и они не будут работать ни для дефолтой коробочной темы ни для других сторонних тем стрктура которых явно будет отличатся от вашей. Потому в любом случае потребуется ручная адаптация вашего плагина для применения тем кто захочет его использовать, а потому это следует осветить(объяснить) в описании к плагину Добавлено 8 минут спустя: Это основные замечания которые влияют на работу плагина и стоило бы исправить\учесть ... остальные замечания (по типу стиля написания кода) являются не влияющими на работу и потому пока можно не упоминать в разрезе начала обучения написания плагинов .... но если желание продолжать творить не пропадёт все же рекомендовал бы ознакомится с соотв. документацией
Если резюмировать то пункты замечаний 1-3 могут не влиять на работоспособность плагина и кое-как работать он может но вот пункт 4 критически важен и из-за этого он скорее всего не будет работать у всех остальных которые захотят им воспользоватся но в силу недостатка знаний не поймут почему он не работает Pavlo Tkachenko aka Dayver
|
|
Bu gönderi Dayver tarafından düzenlendi (2023-05-30 00:53, 1 yıllar önce) |
Kabak |
|
---|---|
Где посмотреть как именно + качественно нужно оформить работу плагина через Ajax? Я пока не понимаю как это сделать через Ajax
Безусловно, я хочу сделать плагин качественным.
Помогите, пожалуйста, правильно оформить и загружать части плагина.
Для меня
- тёмный , незнакомый лес. |
|
Bu gönderi Kabak tarafından düzenlendi (2023-05-30 07:08, 1 yıllar önce) |
webitproff |
|
---|---|
#46731 Kabak: лично я далеко не php-программист, - так читать код, что-то по конкретным примерам, используя конструкции, что-то пересобрать на свой лад, гд потом куча запчастей лишних )) поэтому и не умствую по php, потому что компетентности только на чтение кода и то далеко не всегда. Но вам бы порекомендовал, по вашему вопросу, начать с перелопачивания темы, в которой максимально собрано для написания расширения с нуля Добавлено 13 минут спустя: по Ajax - статейка старенькая, но наверное всё что есть аккаунт удален - не срослось с разработчиками
ушел на другой движок |
|
Bu gönderi webitproff tarafından düzenlendi (2023-05-30 07:41, 1 yıllar önce) |
Kabak |
|
---|---|
Дело в том, что все мои плагины c 2014 года я так и писал, - подсматривая в чужие плагины и анализируя код, а по выходу у меня в голове фрагменты знаний и нет системы особой. Как видите, мои подсмотренные решения - не соответствуют качеству и требованиям Cotonti. А получить исчерпывающие знания изучая чужой код возможно с огромными временными затратами. У меня уже нет столько временного ресурса Добавлено 3 минуты спустя: Я попытался указать плагину hook=ajax и переделал вызов php скрипта, но Ajax пишет ошибку вызова. Разбираться с этим вслепую - чувствую слишком затратно по времени. Это как brute force пароля к чему-нибудь. |
Kopusha |
|
---|---|
1. в users/inc/ создаем users.ajax.php <?php defined('COT_CODE') or die('Wrong URL'); global $db_users, $db; include_once cot_incfile("users", "module"); $a = cot_import('a', 'G', 'TXT'); $m = cot_import("m", "G", "TXT"); $login = cot_import("login", "G", "TXT"); $email = cot_import("email", "G", "TXT"); $data["success"] = false; if ($a == "checklogin") { $user_exists = (bool)cot::$db->query("SELECT user_id FROM ".cot::$db->users." WHERE user_name = ? LIMIT 1", array($login))->fetch(); $data["text"] = //как отработать оповещение, у каждого свое $data["user_exists"] = $user_exists; print json_encode($data); } if ($a == "checkemail") { $email_exists = (bool)cot::$db->query("SELECT user_id FROM ".cot::$db->users." WHERE user_email = ? LIMIT 1", array($email))->fetch(); $data["text"] = //как отработать оповещение, у каждого свое $data["email_exists"] = $email_exists; print json_encode($data); } в корне users - users.rc.php <?php /* ==================== [BEGIN_COT_EXT] Hooks=rc Order=9999 [END_COT_EXT] ==================== */ defined('COT_CODE') or die('Wrong URL'); if ($usr['id'] > 0) { } else { if ($_GET['e'] == 'users' && $_GET['m'] == 'register') { cot_rc_link_footer("modules/users/js/users.js"); } } Далее users/js/users.js $(function () { $('#form input:text[name="rusername"]').blur(function() { if($(this).val().length>=2) { $login = $(this).val(); $.ajax({ url: 'index.php?e=users&m=ajax&a=checklogin&login=' + $login, method: "GET", }).done(function (h) { d = $.parseJSON(h); if (d.user_exists) { //тут как фронэнд отработает код ошибки } }); return false; } }); $('#useremail').blur(function() { if($(this).val().length>=2) { $email = $(this).val(); $.ajax({ url: 'index.php?e=users&m=ajax&a=checkemail&email=' + $email, method: "GET", }).done(function (h) { d = $.parseJSON(h); if (d.email_exists) { //тут как фронэнд отработает код ошибки $('.email input').parent().removeClass('success'); } else { //email validation var regex = new RegExp( '^(([^<>()[\\]\\\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\"]+)*)|' + '(\\".+\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])' + '|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$' ); $('.email input').on('keyup', function(e) { $(this).parent().toggleClass('success', regex.test($(this).val())); }); } }); return false; } }); }); вроде бы все, выдирал с рабочего проекта где много другого, может что и забыл модуль есесно обновить |
Dayver |
|
---|---|
#46734 Kopusha: Оговорка номер один - советовать хакать дефолный модуль - не очень потому что при очередном обновлении все хаки уплывут в мир забвения. И первоначальный подход к решению задачи в виде плагина самый правильный а фаршировать хаками свой или сайт клиента это путь в невозможность обновлять движок на этом сайте. Почему народ это делает?! Возможно проект такой - на этапе создания понятно что быстреее и проще сделать как есть быстро хакнув нужные файлы понимая что на этом сайте обновления движка никогда не будут производится. А возможно народ подумал что проект мёртв и обновлений ожидать не стоит - но чудеса случаются) Возможно кто-то посмотрев на вышеупомянутый код и файлы скажет что хака как такового нет поскольку рекомендуемые действия не затрагивают существующие в дефолтном модуле файлы, но тут всплывает оговорка номер два - урл из приведённого примера index.php?e=users&m=ajax.... работать не будет потому что в модуле есть проверка, а потому что б приведённое решение заработало нужно в указанную проверку добавить элемент 'ajax' а это уже будет именно хаком который отвалится при очередном обновлении. Добавлено 3 минуты спустя: #46731 Kabak: 1) в файле nevalidate.php поменяли хук с standalone на ajax ? 2) в админке после этого нажали кнопку обновить? 3) после этих действий при посещении адреса http://ваш.сайт/index.php?r=nevalidate&name=admin что в ответ видите? Добавлено 3 минуты спустя: #46730 Dayver: Для универсализации кода (что б он работал на любой разметке любой темы) почему бы не сократить условия селектора до вида: $("input[name=rusername]").after(... $("input[name=ruseremail]").after(... $("input[name=rusername]").blur(.... $("input[name=ruseremail]").blur(... Скорее всего такой вариант тоже продолжит работать у вас но и как бонус будет работать и у остальных Pavlo Tkachenko aka Dayver
|
webitproff |
|
---|---|
по больше бы таких замечаний и внимания к деталям. чувствуется профессионализм аккаунт удален - не срослось с разработчиками
ушел на другой движок |
Kabak |
|
---|---|
Заменил
получаю ответ Добавлено 3 минуты спустя: Но при попытке плагина проверить имя из формы регистрации получаю
|
|
Bu gönderi Kabak tarafından düzenlendi (2023-05-30 11:57, 1 yıllar önce) |
Dayver |
|
---|---|
#46731 Kabak: К сожалению исчерпывающей документации по класу /system/Resources.php нет и кроме не полных упоминаний на которые уже здесь давали ссылки ничего кроме как ориентироватся на комментарии формата phpDoc в указанном файле пока не могу посоветовать. Но стоит отметить что в указанном классе phpDoc'и весьма исчерпывающие ... возможно вечером постараюсь написать совсем краткий гайд по этому направлению.
З.Ы. Что касается поиска на этом сайте - понимаю, страдаете и взываете о исправлении .... но не думайте что эти призывы остаются не замеченные - работы по ремонту поиска ведутся, просто как и все остальное не теми темпами которыми хотлось бы Pavlo Tkachenko aka Dayver
|
Kabak |
|
---|---|
1) Как правильно подключить GetUserInfo.js и строки для js.js при установке плагина ? 2) и чтобы плагин заработал через Ajax у меня , а не как standalone
Добавлено 5 минут спустя: js.js исправил. $("input[name=rusername]").after("<div id=\"divMy_Name\"></div>"); $("input[name=ruseremail]").after("<div id=\"divEmail\"></div>"); $("input[name=rusername]").blur(function() { process_name(); }) $("input[name=ruseremail]").blur(function() { process_email(); }) Тогда нужно чтобы скрипт выполнался только на одной странице сайта - регистрационной. Соотвественно js скрипт нужно грузить только на users.register.tpl Добавлено 3 минуты спустя: у меня получается оба скрипта GetUserInfo.js и js.js находятся не в папке с плагином, а в папке themes\имя_темы\js\ |
|
Bu gönderi Kabak tarafından düzenlendi (2023-05-30 11:56, 1 yıllar önce) |
Dayver |
|
---|---|
#46737 Kabak: Тут видно две проблемы: 1) из-за того что сайт на стадии разработки включен дебаг и отображение ошибок\предупреждений то предупреждение которое идёт в вывод ломатет структуру хмl возможно поэтому ваш код GetUserInfo.js ругается 2) Исправить что б PHP не ругался вместо $name['user_name'] = cot_import('name','G','TXT'); $email['user_email'] = cot_import('email','G','TXT'); if (trim($name['user_name']) == ''){ .... написать такое: кстати почему такой странный выбор имён для переменных в виде массива - можно ж проще $verif_name = cot_import('name','G','TXT'); $verif_email = cot_import('email','G','TXT'); if (empty($verif_name)){ ...
Pavlo Tkachenko aka Dayver
|
Kabak |
|
---|---|
Идеально, когда оба скрипта js прописываются и подключаются при установке плагина, но я не знаю как это сделать. |