Перейти к публикации

[Запрос на создание] Модуль для DLE с использованием AJAX - 15$


Рекомендованные сообщения

Требуется модуль для DLE 11.1, который будет копировать данные из заполненной таблицы БД MySQL в дополнительные поля пользователей сайта, используя технологию AJAX. Кодировка UTF8.
В DLE уже есть примерный функционал - это проверка доступности логина при регистрации, поэтому особо ничего изобретать не нужно, а сделать на подобии этого функционала. Итак, ...

 

----- Что имеем "на входе".

 

-- Есть таблица БД "dle_addresses", в которой находятся неиспользованные криптовалютные адреса (Биткоин-адреса). Их много (допустим 10000 шт.) Дамп такой таблицы присоединен к заданию.
Запись в таблице БД состоит из 4 полей:

 

id - идентификатор/номер с автоинкрементом
craddress - сам адрес
programid - идентификатор программы (может иметь значение от 1 и далее)
userid - идентификатор пользователя (по умолчанию значение 0)

т.е. вот так:

 

1 | ххххххххххххххххххххххххх | 1 | 0
2 | yyyyyyyyyyyyyyyyyyyyyyyyy | 5 | 0
3 | zzzzzzzzzzzzzzzzzzzzzzzzz | 8 | 0
...

-- Есть пользователи сайта. Это те, которые зарегистрированы на сайте. Гостей не учитываем.
У всех этих пользователей в профиле есть дополнительные поля такого плана:

 

- craddress-1
- craddress-2
- craddress-3

и т.д.

 

По умолчанию они не заполнены.

 

Поля имеют следующие характеристики:

Тип поля - одна строка
Добавить на страницу регистрации? - нет
Поле может быть изменено пользователем? - нет
Сделать это поле личным? - да

 

-- Есть ряд новостей на сайте. Будем назввать их "Программы". Каждая программа имеет свой ID в БД (ID также виден в адресной строке браузера при просмотре полной новости/программы).


----- Что требуется от модуля

 

Когда пользователь переходит в свой профиль на сайте, его вниманию доступно столько ссылок "Генерировать адрес", сколько на сайте есть программ. Их будет немного, макс. 50 шт. Это автоматизировать не нужно. Допускается вариант, что администратор прописывает div-блоки с id вручную в файл-шаблоне userinfo.tpl


Пользователь должен видеть вот такой список (оформляем div-ами с идентификаторами):

 

Название программы #1: Ссылка "Генерировать адрес" ИЛИ Текст "Ваш адрес ххххххххххххххххххххххххх"
Название программы #2: Ссылка "Генерировать адрес" ИЛИ Текст "Ваш адрес yyyyyyyyyyyyyyyyyyyyyyyyy"
Название программы #3: Ссылка "Генерировать адрес" ИЛИ Текст "Ваш адрес zzzzzzzzzzzzzzzzzzzzzzzzz"
...

ВАЖНЫЙ МОМЕНТ: в вышеуказанном списке по каждому пункту может быть ЛИБО ссылка, ЛИБО текст с адресом. Т.е., если пользователь уже сгенерил адрес - то присутствует текст с адресом. Если у пользователя еще нет адреса - тогда стоит ссылка. Флагом для того или иного значения может быть заполненность или незаполненность дополнительного поля в профиле пользователя. Т.е. если поле пустое - выдаем ссылку. Если в поле есть значение - его и выводим.

 

Если уже присутствует адрес в конкретном пункте списка - отлично, ссылки нет, ничего не делаем. Если стоит ссылка "Генерировать адрес", то при клике пользователем по ней, должно происходить следующее:

 

Посредством связки PHP+AJAX скрипт обращается к таблице БД с адресами, где проверяет, присутствует ли уже запись, где заполнены поля programid и userid не равно 0. Если совпадения нет, то выбирает строку, у которой userid (см. выше) равен 0 И programid соответствует конкретной программе. Т.е. ни за кем не закрепленный адрес. Адрес должен быть выбран в порядке следования таблицы ... имеется в виду, что если "пока ничейный" адрес находится, к примеру, на id 189, то должен быть выбран именно адрес с id 189, а не, например, 519. Т.е. должна присутствовать упорядоченная выборка, а не выборка "вразброс". НО, конечно же учитывая programid.

 

Итак, мы получили новый адрес. Отлично. Но если адреса закончились? Плохо. Далее в отдельности рассмотрим действия модуля для вариантов "Отлично" и "Плохо"...

 

--- Если "Отлично"

 

Найден/получен адрес. Выбираем его и

- записываем в дополнительное поле профиля пользователя в таблицу БД dle_users (xfields)
- обновляем нашу таблицу адресов "dle_addresses", а именно, в поле userid записываем идентификатор пользователя, которому будет принадлежать выбранный адрес
- посредством ajax заменяем ссылку "Генерировать адрес" на текст "Ваш адрес ххххххххххххххххххххххххх" напротив соответствующей программы в списке. Т.е. пользователь визуально видит эту трансформацию без перезагрузки страницы.

Это все.

 

--- Если "Плохо"

 

Адрес не найден, т.к. все адреса заняты (т.е. нет адресов с 0-вым значением поля userid и соответствием programid)

В этом случае обработка должна закончиться выдачей на экран сообщения типа: "Ошибка! Адрес не был сгенерирован. Обратитесь к Администратору сайта и сообщите о проблеме. Код ошибки ХХХ-programid". Сообщение пользователю должно быть выдано с использованием AJAX без перезагрузки страницы. Обратите внимание, что в конце кода ошибки идет programid. Это нужно для того, чтобы знать по какой именно программе отсутствуют адреса.

 

----- Мое видение реализации клиентской/пользовательской части

 

В файл-шаблоне userinfo.tpl в первом блоке (где вывод информации о пользователе) вручную добавляем несколько блоков (каждый для отдельной программы) с уникальными идентификаторами. Например:

<div id="program-1">Название программы #1: контент</div>
<div id="program-2">Название программы #2: контент</div>
<div id="program-3">Название программы #3: контент</div>
...
<div id="program-N">Название программы #N: контент</div>

 

Идентификаторы будут служить для выборки из таблицы по полю programid. Т.е., при нажатии конкретной ссылки, связка PHP+AJAX сможет передавать в MySQL-запрос следующие данные:

 

programid из идентификатора конкретного блока
userid - id пользователя совершающего запрос

 

Если генерируем адрес для программы с id 1, то полученный результат записываем в доп. поле с именем craddress-1, если генерируем адрес для программы с id 2, то полученный результат записываем в доп. поле с именем craddress-2 и т.д.

Т.е. цифра, в конце имени дополнительного поля после символа - (тире), всегда соответствует конкретной программе, т.е. id (новости).

Все это работает только для зарегистрированных для пользователей. Для гостей данный функционал не должен быть доступен.

 

----- Заключение

Как вы уже можете понять, задание не является сложным. Фактически здесь только выборка из БД, проверка на существование и запись в БД.
Заранее благодарю исполнителя за качественно выполненную работу!

 

За работу плачу 15 долларов через Вебмани. Представляете готовый файл(-ы) модуля, я проверяю, если все гуд - оплачиваю. Если замечены будут несоответствия - дорабатываете и я оплачиваю. Дополнительные изменения в тех. задание в процессе выполнения вносить не буду.

 

На все вопросы отвечаю в этой ветке или через ПМ здесь на форуме.

 

С уважением...

 

ПС: дамп таблицы БД:

 

INSERT INTO `dle_addresses` (`craddress`, `programid`, `userid`) VALUES
('1EzSG3Btjfy91hSqwxyMDBoyrtMRzNLi6D', 1, 0),
('1ERmxi8QLvSxxrK3vm1GKPFaeatTCFuTDp', 1, 0),
('13tNZsDksxKy3aAo1kru8ZzoYFH8wWttYY', 1, 0),
('17g4dfX1Zz95szsoiHo3KnBe22zDpYA5yi', 1, 0),
('1BUQtwfof4kDM6GuFwCR9akBSaB97m4ZGD', 1, 0),
('1825djRCbKXJ3DoTJQJgU8ptM53fNftPcK', 2, 0),
('1E3JSBVzSsPBXSC6P32t4yjVQAc6J8q19d', 2, 0),
('36wbeRaQ7hLRGt221NuDbu8FZAeV3DRiqx', 2, 0),
('3NcgqrY8qmohmGeu7XnvsMCMNfXqjLvH1t', 2, 0),
('18quWNY8UBHoPvZ1ZXrZ9z6PhFzdf5MXBJ', 2, 0),
('1EaHa6BCV7twxnPJuyPYaKi4fb5ZuGWUHp', 3, 0),
('1FeM23tNUSCY558V2thBmG9tKuVuBNXvp9', 3, 0),
('167AkFyUtAfQEyYkkn7MuDkbHh2Wy6Tnyz', 3, 0),
('138k12DJkhEY2P6MZgbLtb53byNrFcr6Nb', 3, 0),
('1CMq3V96bQ74RMtFtjvzW9YmvMiq7ksmcs', 3, 0),
('1EzSG3Btjfy91hSqwxyMDBoyrtMRzNLi6D', 1, 0),
('1ERmxi8QLvSxxrK3vm1GKPFaeatTCFuTDp', 1, 0),
('13tNZsDksxKy3aAo1kru8ZzoYFH8wWttYY', 1, 0),
('17g4dfX1Zz95szsoiHo3KnBe22zDpYA5yi', 1, 0),
('1BUQtwfof4kDM6GuFwCR9akBSaB97m4ZGD', 1, 0),
('1825djRCbKXJ3DoTJQJgU8ptM53fNftPcK', 2, 0),
('1E3JSBVzSsPBXSC6P32t4yjVQAc6J8q19d', 2, 0),
('36wbeRaQ7hLRGt221NuDbu8FZAeV3DRiqx', 2, 0),
('3NcgqrY8qmohmGeu7XnvsMCMNfXqjLvH1t', 2, 0),
('18quWNY8UBHoPvZ1ZXrZ9z6PhFzdf5MXBJ', 2, 0),
('1EaHa6BCV7twxnPJuyPYaKi4fb5ZuGWUHp', 3, 0),
('1FeM23tNUSCY558V2thBmG9tKuVuBNXvp9', 3, 0),
('167AkFyUtAfQEyYkkn7MuDkbHh2Wy6Tnyz', 3, 0),
('138k12DJkhEY2P6MZgbLtb53byNrFcr6Nb', 3, 0),
('1CMq3V96bQ74RMtFtjvzW9YmvMiq7ksmcs', 3, 0);

 

Ссылка на сообщение
Поделиться на других сайтах

Админка - нет

Настройки - нет

Обработка других не запланированных действий - например, каких?

Ссылка на сообщение
Поделиться на других сайтах

Например одновременное редактирование профиля и получения craddress приведёт к не очень хорошим последствиям, ибо одна ячейка.
Маловероятно, но всё же.

Изменено пользователем SKYNET74
Ссылка на сообщение
Поделиться на других сайтах

Даю подсказку, как уложиться в бюджет. За основу берется готовый модуль ПафНутия "EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine".

Ссылка http://pafnuty.name/modules/160-editrating.html

 

Меня устраивает даже такой вариант отображения, как там, т.е. во всплывающих модальных окнах.

 

Я как раз ковыряю этот модуль сейчас. Там практически все готово, только поменять переменные и запросы к БД. Ну почти ... Т.е. для опытного программиста (коим я не являюсь) - это примерно на час работы, ИМХО. А 15 долларов за час - это даже по американским меркам круто :)

 

Посмотрите ...

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, PapaKitson сказал:

Даю подсказку, как уложиться в бюджет. За основу берется готовый модуль ПафНутия "EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine".

Ссылка http://pafnuty.name/modules/160-editrating.html

 

Меня устраивает даже такой вариант отображения, как там, т.е. во всплывающих модальных окнах.

 

Я как раз ковыряю этот модуль сейчас. Там практически все готово, только поменять переменные и запросы к БД. Ну почти ... Т.е. для опытного программиста (коим я не являюсь) - это примерно на час работы, ИМХО. А 15 долларов за час - это даже по американским меркам круто :)

 

Посмотрите ...

Причём тут сторонний модуль и то что вам нужно?
Оно никак не вяжется между собой.

За $15 вам разве что очень начинающий фрилансер сделает.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...