Кто помнит или не помнит - я писал когда то, что под заказ пишу модуль для Промокодов (пруфлинк).
Собственно постепенно я его дописываю и сегодня ударным темпом закрыл одну из хотелок.
В чем профит модуля, спросите вы?
Все просто. Если вам нужно пользователю присвоить уникальный номер из заданного диапазона и присвоить ему роль - этот модуль предназначен именно для этого. Администратор генерит промокоды через админку, выдает людям. При регистрации или при редактировании профиля пользователь может указать в специальном поле промокод и получить номер и роль. Полученный номер можно использовать, к примеру, для выдачи значков или футболок и т.п. На роль можно повесить специфические права и доступы.
Для проекта открыл sandbox http://drupal.org/sandbox/softovick/1190802 - если кто желает, может поучаствовать в тестировании и фидбеке. На всякий случай прикрепил к посту архив с модулем.
UPD:
+ добавлен выбор роли, которая присваивается при активации промокода
+ сделан прототип более детального списка промокодов в виде таблицы с ссылкой на профиль пользователя.
Вложение | Размер |
---|---|
promocode.zip | 49.19 КБ |
Комментарии
круто
для 7-ки делать не будете?
Сначала надо довести до ума текущую версию, чтобы оно было хотя бы с минимальными удобствами. А потом уже да, буду портировать и для 7.
инферна одобряэ
А вроде есть уже такое:
или не то?
Нет, не совсем то. Regcode внешне аналогичен, но работает не так, он просто дает возможность зарегистрироватся, если введешь код (насколько я помню). А Rolekey только присваивает роль по вводу кода. Ни тот ни другой не дает возможности присвоить или назначить номер пользователю.
Алексей с почином!
а можно пример использования какой нить попонятнее и на пальцах.
Клуб болельщиков, членам клуба раздаются открытки и пригласительные с промокодами, а при регистрации ему выдается произвольным образом номер из указанных диапазонов. В реале выдается клубный значек с соответствующим номером.
В закладки.
Спасибо.
iNFerNo, спасибо. С нетерпением жду под 7-ку.
iNFerNo ?
Softovick, простите, опечатался.
ну понятно заморочка под задачу конкретную. никуда это не применить вопщем... майка нам как футболистам не нужны... а открытки тем более...
В данном случае да, как и большинство модулей на d.org. Возможно и другие области применения есть, у меня другими мыслями голова занята, чем выискивать их.
Вьюс говно под конкретную задачу, никуда не применить, блоки последних новостей мне не нужны, а вывод тизерами тем более
Как же так, а у меня одна из запланированных фич - интеграция модуля с Views....
1. Нет индексов по полям uid и promonumber
2. Нет механизма удаления промокодов
3. Бредовый алгоритм присвоения случайного номера. Вы хотите до 15 тысяч раз выполнять запрос к базе, чтобы получить свободные номера? Бугога.
Вы в самом деле посмотрели код и список issue или "не смотрел, но осуждаю"?
1. И насколько это даст прирост производительности? В каком месте?
2. Собственно это есть в планах, перечислено в issue.
3. Функция _promocode_user_insert. Реально, там при присвоении номера пользователю запрос только один на получение списка промокодов, в дальнейшем работа с массивом и потом уже UPDATE. Где вы там увидели 15 тысяч обращений, я хз. А если вы имеете в виду получение случайного промокода, чтобы он был именно уникальным - возможно вы и правы, я подумаю над использованием аналогичного алгоритма с массивом, спасибо.
Собственно я не зря сделал песочницу - не хотите туда оформить ваши пожелания в виде issue?
И кстати я так и не понял, зачем номер должен быть случайным. Почему не по порядку? Есть, конечно, хорошие алгоримты получения случайного номера, но по порядку всегда лучше.
В данном случае это было изначальное требование. В планах добавить варианты выбора в настройках - случайный отбор или по порядку. Сама идея случайности выходит из того, что никто заранее не знает, какой номер будет у человека, даже тот, кто выдает промокод, соответственно и никаких обидок не будет при получении значков и т.п.
А я туды не заходил, как-то скачал посмотрел и усё.
Индексы таки не лишние, хотя бы потому что если ляжет у кого-нить бд, он первым делом увидит что у него откуда-то куча запросов без индексов, и будт думать, что это и откуда.
Ну а про запросы, я скачивал модуль из этой темы, не из репозитария. Там при обновлении аккаунта есть нечто вроде:
for ($i = $min; $i < $max; $i++) {
'SELECT COUNT() ...
}
Капитан очевидность шепнул мне на ушко, что если диапазон номеров будет 100-15000, то соответственно и запросов будет 14900 штук.
Критика приветствуется?
t('<strong>Promocode "%pcode":<strong> Is not valid;', array('%pcode' => $pcode)) Зачем тут <strong>? У тебя уже %pcode оборачивается в theme_placeholder(), а выделять ещё какой-то текст некамильфо - не так он важен в данном случае, а смотреться может в разных темах по-разному.
Код надо изменить:
while ($flagunique == 0) {
$q = db_result(db_query("SELECT COUNT(promocode) FROM {promocodes} WHERE promocode = '%s'", $pcode));
if ($q != 0) {
$pcode = sprintf("%09d", rand(1, 999999999));
}
else {
$flagunique = 1;
}
}
Во-первых непонятно зачем нужна агрегатная функция, много она, в данном случае, не съест, но всё равно - незачем.
Во-вторых, зачем столко кода?
Давай перепишем примерно так:
$pcode = sprintf("%09d", rand(1, 999999999));
}while(db_result(db_query("SELECT promocode FROM {promocodes} WHERE promocode = '%s'", $pcode)));
Ну и вообще идея такого перебора мне кажется не очень удачной. Ты тестил на таблице с несколькими десятками тысяч юзеров и промокодов?
Можно сделать алгоритм примерно O(ln(n)) в худшем случае.
Больше ничего не смотрел, т.к. у тебя виндовые переносы, у мну на них аллергия
Посмотрел, задумка правильная.
Из непонятного:
диапозоны 11-50 итд это что и нафига?
это присовеное число что ли?
Идеи по улучьшению (заодно увеличение сфер применения):
-поставить галку присваивать или нет номер. Мне например нафиг не надо уникальный номер в очереди, а вот присвоение роли очень актуально.
- сделать пакетную генерацию кодов. Тоесть выбираем 10-20-мулион кодов нам надо и список их собсвенно появляется (применительно какраз в случае использования в промо акциях) если будет экспортироваться в какой то формат вообще супер.
- Ну и добавить фишку из серии "отправь другу промокод со своим айди получи плюшку" (кстати, наверняка уже есть подобный? не подскажете)
Вся фича именно в присвоении кода и роли. Отдельно для роли есть уже модуль, вполне рабочий.
Вопрос то в универсальности. Допусим для вручения футболок мне нужен код, а завтра я футболки не буду вручать, а буду давать права на распечатку флаеров. Мне кажется так будет универсальнее..
Логично же. И не надо будет ставить вагон модулей на разные случаи...
У меня вопрос к автору этого модуля и к остальным программистам drupal.ru.
Почему вы не выкладываете модули на основной сайт друпала?
Вот как вы ищите модули для друпала? Например модуль генерации приглашений?
Я набираю в гугле drupal generate invites. И в большинстве случаев с первой же формулировки поискового запроса перехожу или на страницу нужного модуля или на страницу форума drupal.org
Теперь скажите, найдется ли этот модуль промокодов с одного запроса? Вы тратите много времени на написание модуля и после этого решаете помочь другим пользователям которые столкнутся с такой же задачей. Так почему бы не увеличить количество людей, которым вы поможете, выложив модуль в то место, где его увидят больше пользователей?
Как то вот вопрос не по адресу, ибо http://drupal.org/sandbox/softovick/1190802
В песочнице, потому что не считаю его пригодным для использования широкой общественностью. Тем не менее по ключевым словам drupal promocode ссылка находит в первой десятке.
Было бы просто - выкладывали бы и модули и темы.
Плюс выложить модуль - это не просто записать на drupal.org, его ещё и поддерживать надо, на что надо уйму времени.
Даже если не в модули, а на форум друпал.орг (он первый в результатах поиска) или хотя бы на этом форуме описание на английском кто нибудь выкладывал бы от этого всё равно была бы польза