Лента блогов InstantCMS

Социальная стимуляция

Перед выходом 1.5.3 несколько меняющей подход к созданию модулей, особо не торопишься чего-то делать. Поэтому, гляжу сквозь призму неких своих наблюдений на перспективы и философствую о неком строительстве "социального государства" в этом движке. Я имею в виду Клубы, Блоги, что можно назвать городами и домами в нашем социальном государстве движка. Они не особо развиваются в плане контента.
  
Я тут пролазил многие наши сайты на InstantCMS. Вижу, что социальная активность в этих областях (Клубы, Блоги) уступает привычному форуму. Думал только у меня клубы из 2-х 3-х человек и 2-х 3-х записей. Но это почти везде так. Стратегически, всё предстоит продумать ещё раз. Чего-то, возможно, недостаёт.

Но то, что уже сделано - хороший фундамент. У движка - большое будущее, что похоже на покорение Эвереста энтузиатами. Все мечтают о пике популярности. И ради него столько приспособлений, странного обмундирования и не только. Кому-то может показаться странным то, о чём я говорю, но такова разница в наших высотах. Всё зависит от нас самих, от знаний, организованности и дара предвидения, который посещает некоторые светлые умы, левитирующие в своём воображении на несколько шагов вперёд.

Возможно ли научно подойти к организации личной жизни пользователя на сайте?
Я вижу смысл в стимуляции людей к развитию в рамках сайта. Ради этого должны существовать хорошие инструменты, позволяющие чувствовать пользователю себя услышанным композитором, даже если он им не является. На то и 21 век, всё более приближающий нас к сообществу роботов, которые будут нас глубоко любить и уважать, пока не сойдут с ума, как в фильме о Терминаторе.

Как можно ждать от пользователя желания основывать города-Клубы на сайте, обстраивать их своими кирпичиками, если сайт не популярен пока? Он оказывается сам на сам, в лучшем случае со случайным прохожим, который может обронить в его адрес легковесное выражение и обрушить, как карточный домик его веру в себя. Ведь побуждающей причиной жизни пользователя на сайте является - его желание понимания. А у админа своих дел полно, чтобы думать об этом постоянно. Место, где пользователя поймут, станет его вторым домом, как бы виртуально оно не выглядело. Так давайте же придумаем такой уютный дом...

Сайт должен стать "живым", искуственным интеллектом, заменяющим админа в некоторых комуникабельных вещах. Например, оказывая знаки внимания, награждая и поздравляя пользователей за что-то. Можно придумать алгоритм автономной комуникабельности сайта с пользователями. Пусть он получит личностные черты. Это будет какой-нибудь персонаж, который будет всегда рядом с админом и помогать ему. Например, "Терминатор". Виртуальный пользователь-автоответчик, советчик или рефери, цепляющий пользователей по определённым правилам, даже когда на сайте никого. Разве не любо дорого получить от него открытку на день рождения, поздравления на Новый Год или несколько реплик на основе интересов пользователя? Он наградит медалью за активность, проведёт голосование и будет переживать разлуку, сказав, как он рад снова вас видеть.

Вот такое развлечение пришло мне на ум. Но это - только часть весёлого замысла.

Вернёмся к Клубам. Должны быть обозначены цели строительства Клубов. Например, Клуб будет считаться достроеным после определённого количества фото, блогов и участников. Это будет приделывать к картинке клуба фундамент, окна, и крышу. Разве не привлекательнее станет людям творить в клубах, чтобы его достроить, до уровня соседского клуба? И чтоб рейтинг украшал дом флажками и гирляндами или вешал паутину при низком рейтинге клуба.

Ещё я подумал над разветвлением Блогов на блог пользователя и блог клуба, как и фотоальбомов. Ведь можно вступить в клуб вместе с определённой рубрикой своего блога и не раздваиваться, храня все записи в своём личном блоге. Пусть в Клуб стекаются отдельные рубрики блогов пользователей, рубрики фотоальбомов пользователей, словно RSS ленты. Думаю, это не трудно придумать. Человек будет одновременно в своём контенте и в своих клубах. К этому, я думаю, надо стремится.

А на счёт представления популярных Клубов на сайте. Если уж говорить о их раскрутке, то напротив них всегда должна быть свежая информация из его новостей, символически изображаемая, как грузовик с последней фоткой или записью на фургоне. Пусть люди хотят строить, нести в дом в игровом настроении.

Подобный опыт у меня есть. Только я всё делал вручную. Раскручивал авторов, подсчитывал их балы, присваивал ранги. Тогда я не знал php и возможностей CMS. Я реально запалил несколько человек, а потом спёкся. Эти люди до сих пор фанатеют от меня. А что если эту идею социальной стимуляции переложить на плечи програмы-Матрицы? Тогда сообщество можно будет увеличить на десятки, сотни, тысячи...

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

(третья редакция)

Привет!

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

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

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

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

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

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

// vvvvvvvv RoViX vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
	$cfg = $inCore->loadComponentConfig('users');
//  ^^^^^ RoViX ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        $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);
        }

//// vvv RoViX vvvvvvvvvvvv ///////////////////////////////////////////////////////////////
	if ( $usertype == 'user' ) {
		$login = $inCore->request('login', 'str', '');
		$address = "/users/$login";
	} else {
		$id_clubs = $inCore->request('id', 'str', '');
		$address = "/clubs/$menuid/$id_clubs";
	}
	$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;
		}
	}
	$startPos = ($page_wall - 1) * $cfg['numpost'];
//// ^^^ RoViX ^^^ ///////////////////////////////////////////////////////////////

        $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 ".$startPos.", ".$cfg['numpost'];
//                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ изменено
        $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');

//// vvv RoViX vvv ///////////////////////////////////////////////////////////////
			if ( $kvo_page > 1 ){
				echo "<p align=center>";
				for ( $ii = 1; $ii<=$kvo_page; $ii++ ) {
					if ( $ii <> $page_wall ) {
						echo "<a href=$address/$ii>$ii</a> ";
					}else{
						echo "<b>$ii </b>";
					}
				}
				echo "</p>";
			}
//// ^^^ RoViX ^^^ ///////////////////////////////////////////////////////////////

        return ob_get_clean();
    }
В файле /admin/components/users/backend.php две строки
Вставил после строки 71    
Код PHP:
$cfg['numpost'] = $_REQUEST['numpost'];
и после строки 145 следующие строки:
Код PHP:
                <tr>
                    <td><strong>Количество сообщений на странице стены: </strong></td>
                    <td>
						<input name="numpost" type="text" id="numpost" size="4" value="<?php echo @$cfg['numpost'];?>"/>
                    </td>
                </tr>
в .htaccess после 179 строки вставил строку:
Код PHP:
RewriteRule ^users/([a-zA-z0-9\.]*)/([0-9]*)$ /index.php?view=users&do=profile&login=$1&menuid=0&page_wall=$2
в .htaccess после 278 строки (с учетом вставки строки 180) вставил строку:
Код PHP:
RewriteRule ^clubs/([0-9]*)/([0-9]*)/([0-9]*)$ /index.php?view=clubs&do=club&menuid=$1&id=$2&page_wall=$3
===============================================================================
1.08.2009
Всем привет!
Спасибо за найденные ошибки. За стену клубов даже мысль в голову не пришла, что она реализована через эту же функцию. Завтра, максимум после завтра выложу с исправлениями.
2.08.2009 0:21(мск)
Всем привет!
P.S. Выложил уже с исправлениями. После исправления уменьшилось количество обращений к БД.

Шаблон на музыкальную тему

Делаю сайт для музыкальной компании, взял их старый дизайн и вставил на instantCMS, начальство сказало ставить другой движок, чтобы без регистрации и прочего...вот появился лишний шаблон, причём с необычным багом, не работает "Профиль", и "Лента"...кто сможет найти проблему, буду очень благодарен...
Шаблон старенького типа, так что юзайте, изменяйте, делайте что хотите...
Качать так:
http://instantcms.ru/upload/userfiles/60/music.zip
или
/users/files/download260.html
Может кто сможет сделать из этого шаба что-то толковое...

Интеграция с SMF

Вступление

Достаточно многие знакомы и используют на своих сайтах скрипт бесплатного форума Simple Machines Forum (SMF).
  Не буду описывать все возможности этого форума - эта статья не об этом.
  И хотя InstantCMS содержит такой компонент, как форум, все же функциональность последнего будет еще долго развиваться до уровня того же SMF.
  Если же просто установить на одной площадке InstantCMS и SMF, то получается некоторая разобщенность ресурса - сайт отдельно, форум отдельно.
  Также заставлять пользователей регистрироваться два раза на сайте - это согласитесь, по крайней мере, несолидно.
  Данная статья позволит Вам связать информационную базу SMF-форума с сайтом на InstantCMS.
  Данный материал строится на предположении того, что таблицы обеих систем находятся в одной mysql-базе.
  Кроме этого, предполагается, что в SMF-форуме была выбрана кодировка win-1251 и папка со скриптами SMF-форума находятся внутри структуры папок InstantCMS.
  Предлагаемый уровень интегрированности информации:
    - единая регистрация. Пользователь регистрируется один раз  в InstantCMS. Пользователь в SMF-форуме заводится автоматически с логином и паролем соответствующими логину и паролю в InstantCMS (ник пользователя в SMF-форуме будет соответствовать логину);
    - модули вывода информации из smf-форума:
         - вывод на главной (или там, где Вы посчитаете нужным) некоторого количества последних сообщений с форума. Количество выводимых сообщений также выбирается Вами.
Кроме этого, предусмотрен вывод начальной части сообщений;
         - вывод списка непрочитанных пользователем сообщений на форуме;
         - вывод списка собственных сообщений на форуме.
  Итак поехали.
  

1. Единая регистрация.

  Во-первых, в SMF-форуме (далее просто форум), я считаю нужно отключить регистрацию пользователей. Не беспокойтесь - это никоим образом не помешает нам с Вами добавлять пользователей в базу форума, но зато оградит от расхождения в базе пользователей форума и пользователей Инстанта. Если же у Вас другие соображения на этот счет - ради Бога, поступайте так, как считаете нужным. Сайт Ваш - Вы там господь и Бог :).
  Во-вторых, скачиваем файлик smf_icms_bridge.zip (http://sverdlovsk.net.ua/users/files/download36.html) из файлов в моем профиле. Распаковываем содержимое архива в корень сайта.
В архиве содержатся все необходимые файлы для интеграции smf-форума и инстанта: модифицированный файл инстанта регистрирующий пользователя в базе smf-форума, файлы модулей, выводящих сообщения с форума на страницах инстанта, api-библиотечка с некоторыми функциями smf-форума, файл с sql-командой для создания дополнительной таблицы в базе. В таблице будет вестись соответствие id пользователя в инстанте и id пользователя в smf-форуме.
  После этого, через админку - Настройки - Резервные копии БД - Восстановление базы данных создаем новую таблицу в базе данных (делаем импорт файла createtbl.sql). Если кому-то будет удобно через phpmyadmin, я тоже возражать не буду. Текст запроса на создание таблицы находится в этом файле (createtbl.sql).
  Проверяем, работает или нет единая регистрация, если все нормально приступаем к следующему шагу.
  

2. Вывод списка последних сообщений с SMF-форума

  Если Вы установили модуль так, как было описано выше, то для подключения модуля вывода n-последних сообщений с форума идем в админку.
  Добавляем модуль:
     Тип модуля: Пользовательский
     Публиковать модуль: Да
     Содержимое модуля: Выбираем внешний скрипт и в окошке ниже заменяем myscript.php на smf_last_messages.php. Жмем кнопку Вставить.
      Все остальные пункты по своему усмотрению.
     Для настройки работы модуля придется заглянуть внутрь файла smf_last_messages.php. В строках 17-19 есть следующие настройки:
        $kvo=10; - количество выводимых в модуле сообщений
$path_of_smf="/smf"; - путь к форуму smf
$kvo_chars_of_body = 200; - количество первых символов выводимых сообщений. Почему стоит такое большое число? Потому что у меня smf в базе русский текст почему-то записывает в виде четырехзначных числе с амперсандом в начале (& #1054 ;& #1073 ;& #1097 ;& #1080 ;& #1077 ; & #1074 ;& #1086 ;& #1087 ;& #1088 ;& #1086 ;& #1089 ;& #1099 ; - пришлось повставлять пробелы, а то парсер преобразует это в слова smile). Если у Вас не так, поменяйте 200 на любое другое число. Если Вы считаете ненужным вывод начала сообщения - ставьте 0.

  

3. Вывод списка непрочитанных сообщений с SMF-форума

      К великому моему сожалению разобраться с этой функцией smf-форума не удалось sad. Точнее, тот промежуток времени, что удалось для этого выделить не позволил этого сделать. Ну что ж, вернусь к этому модулю попозже.

  

4. Вывод списка собственных сообщений на SMF-форуме

      Настройки аналогично предыдущему пункту, только вместо myscript.php вставляем smf_my_messages.php.

P.S. Подправил ссылку для скачивания (просили модуль)

Это решение для версии 1.1.rc4!!!

Для новых версий нужно переделывать!

сапа2 или как я повысил доход х2

Доброго времени суток программисты,разработчики и просто пользователи instantcms!
Как то писал про способ получения прибыли с Вашего сайта в системе Сапе.ру писал 16-08-2009
дак вот с того времени прошло три месяца и я выкладываю очередной скрин моего дохода:
Всем рефералам бесплатные консультации! :)

Как я сделал себе генератор sitemap.xml

Давно и в общем-то безуспешно занимаюсь проблемой создания карты сайта (sitemap.xml) для своего сайта.
Пока материала было мало вполне устраивала работа генератора sitemap, который нашел благодаря lezginka.ru phpSitemapNG154.
Но даже тогда приходилось долго ждать пока паук просканирует сайт.
Однако со временем это превратилось в неприлично длительное занятие и я вообще бросил этим заниматься.
И вот на днях в мою голову приходит удачная мысль, каким образом обойти хитро-мудрый алгоритм формирования ссылок заложенный создателями движка.
Сказано-сделано. Поскольку меня более всего интересует индексация статей (основной контент сайта), то и занялся именно этой частью движка.
Задачу разделил на две составляющие:
-модифицированный модуль "Последние материалы" заполняет таблицу в БД;
-плагин генерирует карту сайта по мере надобности.
Подшаманил существующий модуль последние материалы для того чтобы он заполнял табличку новыми адресочками.
Наплодил модулей для нужных разделов статей и сделал им доступ (отображение) для админов. После добавления статьи/статей открываю главную страницу сайта и готово, новые страницы лежат в карте сайта. Замедления открытия страницы практически не заметны.
Единственно, замедление было когда указал большое количество материалов для вывода последних статей (чтобы в катру попали все материалы и старые тоже). И все равно не настолько большое как при создании карты методом сканирования сайта. Порядка 30 сек.
Да вот еще пробовал как-то онлайновым сервисом воспользоваться, так он при сканировании 1000 страниц (огранничение ресурса для бесплатной генерации карты) прокачал более 200 МБ.
Так по мере заполнения сайта наполняется и карта сайта.
Плагинчик, конечно, создал с "нуля".
Пока все, в дальнейшем планирую развить возможности. Сделать настройки важности по-умолчанию для уровней, сделать возможность просмотра и редактирования таблицы предназначенной для генерации карты сайта (установить например, индивидуальный параметр по обновляемости или важности документа, опять же удаления из карты сайта). Сделать html-версию карты сайта. Может еще чего-нибудь в голову придет.
Однако, надеясь, что разработчики движка присмотрятся к моему пожеланию и в дальнейшем все будет гораздо проще.

Модуль - Случайное из каталога

Модуль "Случайное из каталога" выводит случайным образом данные из Универсального Каталога.


Настраивается привязка к меню, количество случайных, вывод количества полей для режимов Галереи и Списка, просмотры или рейтинги.

Переделан из "Популярное в каталоге" v1.5.2

Установка:
1)Разархивировать архив в корень
2)Выполнить в phpMyAdmin для вашей базы sql запрос из файла module.sql
3)Сделать привязку к меню в админке и настроить вывод
4) Проверьте стили вашего дизайна
templatest/ваш дизайн/css/styles.css
Модуль пользуется (uc_latest_item, uc_latest_item2, uc_latest_link)
Если их нет, вставьте:
(Подробности внутри архива)

Архив:
/users/files/download255.html

Добавлено в InstantWiki
http://instantcms.ru/wiki/doku.php/дополнения:модули