Хак. Поднятие анкеты в поиске за рейтинг. версия 1.9

+25
1.92K
Хак. Поднятие анкеты в поиске за рейтинг. версия 1.9
Иллюстрация
Если у вас дефолтный шаблон то скачиваем с заменой эти файлы instantcms.ru/users/files/download2348.html инструкция в установке.

описывать не буду.прочитать можно тут поднятие анкет версия 1.7
1.Делим пользователей при регистрации на мужчин и женщин (добовляем вкладку выбор города)
открываем \templates\ваш шаблон\components\com_registration.tpl
после строк
  1. <tr>
  2. <td valign="top" class="">
  3. <div><strong>{$LANG.BIRTH}:</strong></div>
  4. <div><small>{$LANG.NOPUBLISH_TEXT}</small></div>
  5. </td>
  6. <td valign="top" class="">{php}$inCore=cmsCore::getInstance(); echo $inCore->getDateForm('birthdate'){/php}</td>
  7. </tr>
вставляем
  1. <tr>
  2. <td valign="top"><strong>Пол:</strong></td>
  3. <td valign="top">
  4. <select name="gender" id="gender" style="width:200px">
  5. <option value="m" {if $gender=='m'} selected {/if}>Мужской</option>
  6. <option value="f" {if $gender=='f'} selected {/if}>Женский</option>
  7. </select>
  8. <span class="regstar">*</span>
  9. </td>
  10. </tr>
  11. <tr>
  12. <td valign="top" class="" width="269">
  13. <div><strong>Ваш город:</strong></div>
  14. <small>Указав город вы сможете искать своих земляков</small>
  15. </td>
  16. <td valign="top" class="">
  17. <input name="city" id="city" class="text-input" type="text" size="30" value="{$city}" />
  18. <span class="regstar">*</span>
  19. </td>
  20. </tr>
  21.  
2. открываем открываем components\registration\frontend.php находим в тексте код
  1.  
  2. if ($cfg['ask_icq']){
  3. $icq = $inCore->request('icq', 'str', '');
  4. $icq = preg_replace('/([^0-9])/i', '', $icq);
  5. } else {
  6. $icq = '';
  7. }
после него вставляем
  1. $gender = $inCore->request('gender', 'str', '');
  2. $city = $inCore->request('city', 'str', '');
  3. if(!$city) {$msg .= 'Необходимо указать город
  4. ';}
далее ищем запрос $sql = "INSERT INTO cms_user_profiles
заменяем на
  1. $sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who, gender)
  2. VALUES (".$new_user_id.", '$city', '', '0', '0', '1', '0', '', 'all', '$gender')";
  3.  
Ищем строчку
//create advanced user profile
if ($new_user_id){

}
ПОСЛЕ СТРОК:
$inDB->query($sql);
ВСТВАЛЯЕМ:
  1. $sql1 = "SELECT MAX(position) as c FROM cms_user_profiles";
  2. $result1111 = $inDB->query($sql1);
  3. $result1111 = $inDB->fetch_assoc($result1111);
  4. $pos23 = 1 + $result1111['c'];
  5. $sql1 = "UPDATE cms_user_profiles SET position = '$pos23' WHERE id = '$new_user_id'";
  6. $inDB->query($sql1);
3. Добавляем в базу данных поле position:
Для этого делаем следующий SQL-запрос:
  1. ALTER TABLE `cms_user_profiles` ADD `position` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `city`
4. Прописываем всем оставшимся юзерам поле position
Для этого делаем следующий SQL-запрос:
  1. UPDATE `cms_user_profiles` SET POSITION = id
5. Скачиваем этот архив.Распаковываем архив (папка conponents).
6. Дописываем в файл components/users/model.php
  1. public function getPostion($pos, $gen){
  2. $sql = "SELECT COUNT(p.id) as c
  3. FROM cms_user_profiles p
  4. WHERE position >= ".$pos." AND gender = '".$gen."'";
  5.  
  6. $result = $this->inDB->query($sql);
  7. $result = $this->inDB->fetch_assoc($result);
  8.  
  9. return $result['c'];
  10.  
  11. }
ниже в запросе
$sql = "SELECT
u.id as id,
u.login,
u.nickname,
u.email,
u.icq,
находим такую строчку
p.city, p.description, p.showmail, p.showbirth, p.showicq,
заменяем на эту
p.city, p.position, p.description, p.showmail, p.showbirth, p.showicq,
7.открываем components/users/frontend.php
в if ($do=='profile'){
выше строки $usr['banned'] вставляем

  1. ///////////////////////////////////////////// для анкет
  2. if ($usr['gender'] == 'm' || $usr['gender'] == 'f' ) { $usr['position'] = $model->getPostion($usr['position'], $usr['gender']); }
  3. else {$usr['position'] =0;}
  4.  
  5. ///////////////////////// для анкет(конец);
ищем строчки и закрываем //
//if($orderby != 'karma' && $orderby != 'rating') { $orderby = 'regdate'; }
//if ($orderto != 'asc' && $orderto != 'desc' ){ $orderto = 'desc'; }
ниже за ними прописываем
  1. if($orderby == 'karma') { $orderby = 'karma'; $link['selected'] = 'positive'; }
  2. if($orderby == 'rating') { $orderby = 'rating'; $link['selected'] = 'rating';}
  3. if($orderby == 'regdate') { $orderby = 'regdate'; $link['selected'] = 'latest'; }
  4. if($orderby == 'man') { $orderby = 'position'; $order= 'AND p.gender = \'m\''; $link['selected'] = 'man';}
  5. if($orderby == 'woman') { $orderby = 'position';$order= 'AND p.gender = \'f\''; $link['selected'] = 'woman';}
То, что внутри
if (!isset($querysql)){

if (!@$_SESSION['usr_online']){.....
...
}
меняем на
  1. if (!@$_SESSION['usr_online']){
  2.  
  3. $sql = "SELECT
  4. u.id as id,
  5. u.login,
  6. u.nickname,
  7. u.logdate as flogdate,
  8. u.is_deleted as is_deleted,
  9. u.birthdate, u.rating,
  10. u.status as microstatus,
  11. p.city, p.karma as karma, p.imageurl,
  12. p.gender as gender
  13. FROM cms_users u
  14. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  15. WHERE u.is_locked = 0 AND u.is_deleted = 0 ".$order."
  16. ORDER BY ".$orderby." ".$orderto."
  17. LIMIT ".(($page-1)*$perpage).", $perpage";
  18. } else {
  19.  
  20. $sql = "SELECT
  21. o.user_id as id,
  22. u.login,
  23. u.nickname,
  24. u.logdate as flogdate,
  25. u.is_deleted as is_deleted,
  26. u.birthdate, u.rating,
  27. u.status as microstatus,
  28. p.city, p.karma as karma, p.imageurl,
  29. p.gender as gender
  30. FROM cms_online o
  31. LEFT JOIN cms_users u ON u.id = o.user_id
  32. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  33. WHERE ".$orderby." u.is_locked = 0 AND u.is_deleted = 0 ".$order."
  34. GROUP BY o.user_id
  35. ORDER BY ".$orderby." ".$orderto."
  36. LIMIT ".(($page-1)*$perpage).", $perpage";
  37. }
  38. } else {
  39. $sql = $querysql;
  40. }
после строк

$link['latest'] = '/users/';
$link['positive'] = '/users/positive.html';
$link['rating'] = '/users/rating.html';
дописываем
  1. $link['man'] = '/users/man.html';
  2. $link['woman'] = '/users/woman.html';
ВСЁ НЕ ВЛЕЗЛО В БЛОГ Вторая часть тут
PS. Тестил на локалке… у меня всё работает… желаю и вам )))
кому помог принемаю блогадарности на
Z205596765246
R229037465412
Коплю на Биллинг пользователей
0
WALTERZ WALTERZ 11 лет назад #
Похвально, разумеется + :)
Однако, по-моему есть некоторые изменения лишние. Например, выбор пола и города при регистрации.
+1
nikolas nikolas 11 лет назад #
для социальных сетей и служб знакомств на и инстанте - считаю не лишнее..Есть поиск по М и Ж ..захотел в поиске на первое место оплатил рейтингом и в перёд)))
0
WALTERZ WALTERZ 11 лет назад #
Это понятное дело :)
Я имею ввиду другое. То есть зачем регистрацию в это втягивать?
Пользователь во всяком случае в поиске поднимется, вне зависимости от пола. Так что даже не указав свой пол, можно "подняться".
0
nikolas nikolas 11 лет назад #
поиск поделен на М и Ж..М в поиске отдельно от Ж ..по этому и в регистрации М и Ж .
0
WALTERZ WALTERZ 11 лет назад #
Вы наверное не поняли что я имею ввиду.
В таблице имеется новая колонка position, вне зависимости от пола.
Запрос организовывается с условием выбранного пола и очередностью позиции.
То есть пол и позиция друг друга не касаются вовсе.
0
My-InstantCMS.Ru My-InstantCMS.Ru 11 лет назад #
nikolas, Спасибо то что надо, но меня тоже интересует вопрос от WALTERZ и у меня и так при регистрации есть выбор пол и выбор города в "select" и они отличаются от твоего кода, мне пропустить первый пункт или нет?
0
nikolas nikolas 11 лет назад #
да..
0
Агроном Агроном 11 лет назад #
Отличная доработка. Стояла у меня еще на 1.7. Спасибо. И вот возник вопрос. Построение списка по позиции анкеты я так понял осуществляется только во вкладках парни и девушки. А возможно сделать чтобы анкеты так же строились и при использовании поиска пользователей? Или может это работает и просто у меня что то не так.
0
WALTERZ WALTERZ 11 лет назад #
Тут не реализовано, но такое несложно проделать.
В запросе лишь убрать пол.
0
Агроном Агроном 11 лет назад #
А можно подробнее?
0
WALTERZ WALTERZ 11 лет назад #
Извините, но я больше не буду писать (постараюсь) готовых решений. На разъяснение я потрачу больше времени, но пользы принесу больше.
Буду направлять и разъяснять. Программист без стремления развития никому не нужен. Хотя это матчасть даже...тут основных знаний достаточно.
И так разберём запрос который предоставлен:
Код PHP:
  1. $sql = "SELECT
  2. u.id as id,
  3. u.login,
  4. u.nickname,
  5. u.logdate as flogdate,
  6. u.is_deleted as is_deleted,
  7. u.birthdate, u.rating,
  8. u.status as microstatus,
  9. p.city, p.karma as karma, p.imageurl,
  10. p.gender as gender
  11. FROM cms_users u
  12. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  13. WHERE u.is_locked = 0 AND u.is_deleted = 0 ".$order."
  14. ORDER BY ".$orderby." ".$orderto."
  15. LIMIT ".(($page-1)*$perpage).", $perpage";
SELECT - это мы извлекаем из БД данные. До FROM идёт перечисления полей.
FROM - указывается таблица, из которой эти данные берутся (то есть cms_users).
LEFT JOIN - соединяет записи из 2ух таблиц.
WHERE - условие. Тут идёт условие на то, чтобы пользователь не был забанен или удалён + переменная $order то есть именно тут идёт условие на пол пользователя.
В нашем случае при переходе на список пользователей мужчин, переменная $order применяет вид AND p.gender = 'm' (И ещё момент упустил - AND - это "и" в условии...то есть пользователь не должен быть забанен и не заблокирован и наше условие).
То есть, WHERE у нас получает вид
Код PHP:
  1. WHERE u.is_locked = 0 AND u.is_deleted = 0 AND p.gender = 'm'
ORDER BY - сортировка вывода результата. То есть здесь идёт сортировка по полю позиций и по убыванию\возрастанию.
Сортировка имеет структуру следующую:
ORDER BY поле убывание\возрастание(DESC\ASC).
В нашем случае, мы получаем следующий вид:
Код PHP:
  1. ORDER BY position DESC
Если что-то не понятно объяснил, обращайтесь, помогу!
0
WALTERZ WALTERZ 11 лет назад #
Про LIMIT забыл.
Этот оператор отвечает за количество выводимых записей.
В нашем случае переменной задается количество на страницу.
0
Алхимик Алхимик 11 лет назад #
хорошо, если бы был плагин)
0
AlexMonstra AlexMonstra 11 лет назад #
ЖДЁМ ДЛЯ 1.10!

Еще от автора

сообщения на Ajax 1.9
сообщения пользователя на Ajax 1.9ДЕМО минимум запросов
Смена фона пользователем
Решил приукрасить сайт для пользователей. Нужно было что бы сайт менял фон.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.