<<<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
Відредаговано: Dayver (30.05.2023 00:53, 2 року тому) |
| Kabak |
|
|---|---|
Где посмотреть как именно + качественно нужно оформить работу плагина через Ajax? Я пока не понимаю как это сделать через Ajax
Безусловно, я хочу сделать плагин качественным.
Помогите, пожалуйста, правильно оформить и загружать части плагина.
Для меня
- тёмный , незнакомый лес. Відредаговано: Kabak (30.05.2023 07:08, 2 року тому) |
| webitproff |
|
|---|---|
#46731 Kabak: лично я далеко не php-программист, - так читать код, что-то по конкретным примерам, используя конструкции, что-то пересобрать на свой лад, гд потом куча запчастей лишних )) поэтому и не умствую по php, потому что компетентности только на чтение кода и то далеко не всегда. Но вам бы порекомендовал, по вашему вопросу, начать с перелопачивания темы, в которой максимально собрано для написания расширения с нуля Добавлено 13 минут спустя: по Ajax - статейка старенькая, но наверное всё что есть аккаунт удален - не срослось с разработчиками
ушел на другой движок Відредаговано: webitproff (30.05.2023 07:41, 2 року тому) |
| 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 минуты спустя: Но при попытке плагина проверить имя из формы регистрации получаю
Відредаговано: Kabak (30.05.2023 11:57, 2 року тому) |
| 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\ Відредаговано: Kabak (30.05.2023 11:56, 2 року тому) |
| 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 прописываются и подключаются при установке плагина, но я не знаю как это сделать. |