PapaKitson 25 Опубликовано: 14 ноября 2016 Рассказать Опубликовано: 14 ноября 2016 Требуется модуль для 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); Цитата Ссылка на сообщение Поделиться на других сайтах
SKYNET74 315 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Админка? Настройки? Обработка других не запланированных действий? 1 Цитата Ссылка на сообщение Поделиться на других сайтах
PapaKitson 25 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Автор Админка - нет Настройки - нет Обработка других не запланированных действий - например, каких? Цитата Ссылка на сообщение Поделиться на других сайтах
SKYNET74 315 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 (изменено) Например одновременное редактирование профиля и получения craddress приведёт к не очень хорошим последствиям, ибо одна ячейка. Маловероятно, но всё же. Изменено 15 ноября 2016 пользователем SKYNET74 1 Цитата Ссылка на сообщение Поделиться на других сайтах
PapaKitson 25 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Автор Да, этот момент желательно предотвратить конечно ... Цитата Ссылка на сообщение Поделиться на других сайтах
SKYNET74 315 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Ну не знаю, проработка всех моментов под ключ явно не уложится в $15... 1 Цитата Ссылка на сообщение Поделиться на других сайтах
PapaKitson 25 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Автор Даю подсказку, как уложиться в бюджет. За основу берется готовый модуль ПафНутия "EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine". Ссылка http://pafnuty.name/modules/160-editrating.html Меня устраивает даже такой вариант отображения, как там, т.е. во всплывающих модальных окнах. Я как раз ковыряю этот модуль сейчас. Там практически все готово, только поменять переменные и запросы к БД. Ну почти ... Т.е. для опытного программиста (коим я не являюсь) - это примерно на час работы, ИМХО. А 15 долларов за час - это даже по американским меркам круто Посмотрите ... Цитата Ссылка на сообщение Поделиться на других сайтах
SKYNET74 315 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 3 часа назад, PapaKitson сказал: Даю подсказку, как уложиться в бюджет. За основу берется готовый модуль ПафНутия "EditRating — модуль для лёгкого редактирования рейтинга в DataLife Engine". Ссылка http://pafnuty.name/modules/160-editrating.html Меня устраивает даже такой вариант отображения, как там, т.е. во всплывающих модальных окнах. Я как раз ковыряю этот модуль сейчас. Там практически все готово, только поменять переменные и запросы к БД. Ну почти ... Т.е. для опытного программиста (коим я не являюсь) - это примерно на час работы, ИМХО. А 15 долларов за час - это даже по американским меркам круто Посмотрите ... Причём тут сторонний модуль и то что вам нужно? Оно никак не вяжется между собой. За $15 вам разве что очень начинающий фрилансер сделает. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
PapaKitson 25 Опубликовано: 15 ноября 2016 Рассказать Опубликовано: 15 ноября 2016 Автор Какое ваше предложение по цене? Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.