Постраничная стена

+14
2.65K
(третья редакция)

Привет!

Как и следует из названия поста, сегодня мы наконец-то заставим стену пользователя показывать все надписи с разбивкой на страницы.
Более того, каждый сможет легко настроить количество надписей на странице на его сайте.
Итак, приступим:
1. Берем банку пива.
Ой нет — это лучше потом, когда все заработает 😊.
Тогда скачиваем архив — старая ссылка.
Скачиваем отсюда -> user_wall_1_1.zip ( sverdlovsk.net.ua/users/files/download27.html)
Исправил ссылки для скачивания!!!
2. Распаковываем его в какой-нибудь папочке на своем ПК.
3. Закачиваем в корень своего сайта (естественно с заменой файлов).
4. Запускаем скрипт Ваш.сайт/upgrade_user_wall.php (Если ставите в первый раз)
6. В админке в "Компоненты — Профили" настраиваем количество записей на странице стены.
7. Сохраняем.
8. Пьем, наконец, пиво!

P.S. Удаляем файл upgrade_user_wall.php из корня сайта (во избежание недоразумений)
P.P.S. У кого версия ниже 1.5 НУЖНО пропустить все шаги кроме 8.
Для тех, кто не понял.

Внимание, все описанное справедливо для версии 1.5!

В 1.5.1 не проверялось. Если кто-то пробовал — отпишитесь.

Описание изменений (в комментариях не читается 😥)
Наибольшие изменения в файле /core/classes/user.class.php. Но там изменена только одна функция getUserWall
  1. public static function getUserWall($user_id, $usertype='user'){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5. $inUser = self::getInstance();
  6.  
  7. // vvvvvvvv RoViX vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  8. $cfg = $inCore->loadComponentConfig('users');
  9. // ^^^^^ RoViX ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  10.  
  11. $menuid = $inCore->menuId();
  12. $myprofile = false;
  13.  
  14. if ($usertype=='user'){
  15. $myprofile = ($inUser->id == $user_id || $inUser->is_admin);
  16. } else {
  17. $myprofile = (clubUserIsRole($user_id, $inUser->id, 'moderator') || $inUser->is_admin);
  18. }
  19.  
  20. //// vvv RoViX vvvvvvvvvvvv ///////////////////////////////////////////////////////////////
  21. if ( $usertype == 'user' ) {
  22. $login = $inCore->request('login', 'str', '');
  23. $address = "/users/$login";
  24. } else {
  25. $id_clubs = $inCore->request('id', 'str', '');
  26. $address = "/clubs/$menuid/$id_clubs";
  27. }
  28. $sql = "SELECT count( w.id ) as cntWalls
  29. FROM cms_user_wall w, cms_users u
  30. WHERE w.user_id = $user_id AND w.author_id = u.id AND w.usertype = '$usertype'";
  31. $result = $inDB->query($sql) ;
  32. if ($inDB->num_rows($result)){
  33. $kvo = $inDB->fetch_assoc($result);
  34. $kvo_page = $kvo['cntWalls'] / $cfg['numpost'];
  35. if ( $kvo_page <> (int)$kvo_page) { $kvo_page = (int)$kvo_page + 1; }
  36. if ( isset($_GET['page_wall']) ) {
  37. $page_wall = $_GET['page_wall'];
  38. }else{
  39. $page_wall = 1;
  40. }
  41. }
  42. $startPos = ($page_wall - 1) * $cfg['numpost'];
  43. //// ^^^ RoViX ^^^ ///////////////////////////////////////////////////////////////
  44.  
  45. $sql = "SELECT w.*, u.nickname as author, u.login as author_login, DATE_FORMAT(w.pubdate, '%d-%m-%Y (%h:%i)') as fpubdate
  46. FROM cms_user_wall w, cms_users u
  47. WHERE w.user_id = $user_id AND w.author_id = u.id AND w.usertype = '$usertype'
  48. ORDER BY w.pubdate DESC
  49. LIMIT ".$startPos.", ".$cfg['numpost'];
  50. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ изменено
  51. $result = $inDB->query($sql);
  52.  
  53. $total = $inDB->num_rows($result);
  54.  
  55. $records = array();
  56.  
  57. if ($total){
  58. while($record = $inDB->fetch_assoc($result)){
  59. $record['content'] = nl2br($inCore->parseSmiles($record['content'], true));
  60. $record['avatar'] = usrImage($record['author_id'], 'small');
  61. $records[] = $record;
  62. }
  63. }
  64.  
  65.  
  66. $smarty = $inCore->initSmarty('components', 'com_users_wall.tpl');
  67.  
  68. $smarty->assign('menuid', $menuid);
  69. $smarty->assign('total', $total);
  70. $smarty->assign('records', $records);
  71. $smarty->assign('user_id', $inUser->id);
  72. $smarty->assign('myprofile', $myprofile);
  73. $smarty->assign('usertype', $usertype);
  74.  
  75. $smarty->display('com_users_wall.tpl');
  76.  
  77. //// vvv RoViX vvv ///////////////////////////////////////////////////////////////
  78. if ( $kvo_page > 1 ){
  79. echo "<p align=center>";
  80. for ( $ii = 1; $ii<=$kvo_page; $ii++ ) {
  81. if ( $ii <> $page_wall ) {
  82. echo "<a href=$address/$ii>$ii</a> ";
  83. }else{
  84. echo "<b>$ii </b>";
  85. }
  86. }
  87. echo "</p>";
  88. }
  89. //// ^^^ RoViX ^^^ ///////////////////////////////////////////////////////////////
  90.  
  91. return ob_get_clean();
  92. }
  93.  
В файле /admin/components/users/backend.php две строки
Вставил после строки 71
  1. $cfg['numpost'] = $_REQUEST['numpost'];
и после строки 145 следующие строки:
  1. <tr>
  2. <td><strong>Количество сообщений на странице стены: </strong></td>
  3. <td>
  4. <input name="numpost" type="text" id="numpost" size="4" value="<?php echo @$cfg['numpost'];?>"/>
  5. </td>
  6. </tr>
  7.  
в .htaccess после 179 строки вставил строку:
  1. RewriteRule ^users/([a-zA-z0-9\.]*)/([0-9]*)$ /index.php?view=users&do=profile&login=$1&menuid=0&page_wall=$2
  2.  
в .htaccess после 278 строки (с учетом вставки строки 180) вставил строку:
  1. RewriteRule ^clubs/([0-9]*)/([0-9]*)/([0-9]*)$ /index.php?view=clubs&do=club&menuid=$1&id=$2&page_wall=$3
  2.  
===============================================================================
1.08.2009
Всем привет!
Спасибо за найденные ошибки. За стену клубов даже мысль в голову не пришла, что она реализована через эту же функцию. Завтра, максимум после завтра выложу с исправлениями.
2.08.2009 0:21(мск)
Всем привет!
P.S. Выложил уже с исправлениями. После исправления уменьшилось количество обращений к БД.
0
widik widik 14 лет назад #
виктор вы немогли бы описать что вы внесли какие строки а то я уже вставлял в эти файлы

после этого изменения боюсь что пропадут
0
Виктор Виктор 14 лет назад #
Наибольшие изменения в файле /core/classes/user.class.php. Но там изменена только одна функция getUserWall
Код PHP:
    public static function getUserWall($user_id, $usertype='user'){

        $inDB       = cmsDatabase::getInstance();
        $inCore     = cmsCore::getInstance();
        $inUser     = self::getInstance();

		[b]$cfg = $inCore->loadComponentConfig('users');[/b]

        $menuid     = $inCore->menuId();
        $myprofile  = false;

        if ($usertype=='user'){
            $myprofile = ($inUser->id == $user_id || $inUser->is_admin);
        } else {
            $myprofile = (clubUserIsRole($user_id, $inUser->id, 'moderator') || $inUser->is_admin);
        }
[b]
//// vvv RoViX ///////////////////////////////////////////////////////////////
		$sql = "SELECT u.login FROM cms_users u WHERE u.id = $user_id";
		$result = $inDB->query($sql) ;
		if ($inDB->num_rows($result)){
			$user_login = $inDB->fetch_assoc($result);
		}

		$sql = "SELECT count( w.id ) as cntWalls
				FROM cms_user_wall w, cms_users u
                WHERE w.user_id = $user_id AND w.author_id = u.id AND w.usertype = '$usertype'";
		$result = $inDB->query($sql) ;
		if ($inDB->num_rows($result)){
			$kvo = $inDB->fetch_assoc($result);
			$kvo_page = $kvo['cntWalls'] / $cfg['numpost'];
			if ( $kvo_page  (int)$kvo_page) { $kvo_page = (int)$kvo_page + 1; }
			if ( isset($_GET['page_wall']) ) {
				$page_wall = $_GET['page_wall'];
			}else{
				$page_wall = 1;
			}
			#echo "page_wall=$page_wall num_post=".$cfg['numpost']." watermark=".$cfg['watermark'];
		}
		$startPos = ($page_wall - 1) * $cfg['numpost'];
//// ^^^ RoViX ///////////////////////////////////////////////////////////////
[/b]
        $sql = "SELECT w.*, u.nickname as author, u.login as author_login, DATE_FORMAT(w.pubdate, '%d-%m-%Y (%h:%i)') as fpubdate
                FROM cms_user_wall w, cms_users u
                WHERE w.user_id = $user_id AND w.author_id = u.id AND w.usertype = '$usertype'
                ORDER BY w.pubdate DESC
                LIMIT [b]".$startPos.", ".$cfg['numpost'][/b];

        $result     = $inDB->query($sql);

        $total      = $inDB->num_rows($result);

        $records    = array();

        if ($total){
            while($record = $inDB->fetch_assoc($result)){
                $record['content']  = nl2br($inCore->parseSmiles($record['content'], true));
                $record['avatar']   = usrImage($record['author_id'], 'small');
                $records[]          = $record;
            }
        }

        ob_start();

        $smarty = $inCore->initSmarty('components', 'com_users_wall.tpl');

        $smarty->assign('menuid', $menuid);
        $smarty->assign('total', $total);
        $smarty->assign('records', $records);
        $smarty->assign('user_id', $inUser->id);
        $smarty->assign('myprofile', $myprofile);
        $smarty->assign('usertype', $usertype);

        $smarty->display('com_users_wall.tpl');
[b]
//// vvv RoViX ///////////////////////////////////////////////////////////////
			if ( $kvo_page > 1 ){
				echo "";
				for ( $ii = 1; $ii
0
Anonimus Anonimus 14 лет назад #
P.P.S. У кого версия ниже 1.5 НУЖНО пропустить все шаги кроме 8.
и первого laugh
0
L.B.Griffin L.B.Griffin 14 лет назад #
Респект огромный, Виктор! Лекарство страждущим)

Только проблемка - на 1.2 не ставится.
кстати, там не было /core/classes/user.class.php, создал новую папка и файл
но пишется при запуске:
Пишет Fatal Error: Class `cmsCore&#8217; not found in ...\upgrade_user_wall.php on line 18
0
L.B.Griffin L.B.Griffin 14 лет назад #
мм..поясню сперва без запуска файла upgrade_user_wall пробовал - листинг не появился.
А в админке в "Профилях Польз." выдается кстати Fatal error: Call to a member function loadComponentConfig() on a non-object in ...\admin\components\users\backend.php on line 37

(файл backend.php заменился c 12кб (от вер 1.2) на 18 кб (из архива) -от вер 1.5 видимо?)
0
Виктор Виктор 14 лет назад #
версии 1.2 несовместимы. Данный рецепт не будет работать на 1.2
Там же в посте ясно (я так думалsmile) написано "У кого версия ниже 1.5 - те сразу приступают к пиву", то есть ЭТО НЕ РАБОТАЕТ ни на 1.1, ни на 1.2 и даже на 1.2.1
Файл upgrade_user_wall.php просто добавляет в настройки компонента users еще один параметр - количество сообщений выводимых на странице стены. Не более того, вся основная работа это как раз user.class.php
В 1.5 перевели на классы, в предыдущих версиях этого не было. Так что толку от того, что в системе появился файл user.class.php круглый ноль - система не использует его.
0
L.B.Griffin L.B.Griffin 14 лет назад #
в backend оригинальный вставил указанные строки, там все по логике. в htaccess тоже, перед ###default###
0
L.B.Griffin L.B.Griffin 14 лет назад #
:)))сейчас покопался, функцией GetUSerWall нигде не пахнет, так и подумал, что на 1.2 увы и ах..

PS. Юмор не понял про пиво - настолько поскорее хотелось прикрутить листинг)))
0
widik widik 14 лет назад #
а после чего вставлять этот код после какой строки или это всёравно ?
0
Виктор Виктор 14 лет назад #
Там над каждым блоком есть надпись куда вставлять.
Текст функции приведен полностью, нужно просто найти ее в файле. А еще проще - скопировать файлы на свой сервер (так как описано в посте)
+1
Эдуард Исламов Эдуард Исламов 14 лет назад #
На стене юзера работает на ура!
А вот на стене клуба странный "эффект" - клик на страницу "2" и далее отправляет хз куда.
Пример здесь:
http://h2o-land.ru/clubs/38/12
0
Эдуард Исламов Эдуард Исламов 14 лет назад #
Примера уже нет - пришлось пока вернуть всё как было...
А теперь ещё нужно файл user.class.php из версии 1.5.1 подгонять)))
0
Виктор Виктор 14 лет назад #
Исправлено.
Внимание, все описанное справедливо для версии 1.5!
0
14 лет назад #
А я так и не понял что делать для версии 1,5. Судя по админке то этот плагин отсутствует. Если так то как его установить, вернее откуда можно скачать т.к. ссылка пустая
0
Виктор Виктор 14 лет назад #
это не плагин
0
14 лет назад #
Ссылка на архив битая. Дайте актуальную, пожалуйста. =)
0
Эдуард Исламов Эдуард Исламов 14 лет назад #
Для версии 1.5.1:
(закачал на депозит - здесь чё-то глючит...)
http://depositfiles.com/files/ztx6hd2vi

Ещё одно - для тех, кто уже прикручивал или хочет прикрутить себе "визиты" - файл "backend.php" (визиты+постраничный вывод стены, версия 1.5.1), положить в папку \admin\components\users\:
http://depositfiles.com/files/i516aqf1r

Еще от автора

Расширенная статистика сайта
В своё время maxisoft выложил модуль "Статистика сайта" посмотрев его некоторое время понял, что мне не хватает информации предоставляемой э
Плагин «История рейтинга»
Несколько раз встречалось на сайте пожелание увидеть информацию о том, кто и за что "плюсует"/"минусует" рейтинг по аналогии с &qu
Рекорд посетителей
Представляю для желающих модуль для instantcms «Рекорд посетителей» для сайта.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.