+4.52
5 читателей, 84 топика

Создание рассылок

Создание каких-то любых рассылок, по критериям из профиля юзеров.
Говно хосты, или vps с лимитами на отправку исходящего — не получится. Даже не пытайтесь.

  • Есть возможность фильтра получателей по свойству «Пол» («мужчины», «женщины», «не указан»)
  • Можно посмотреть список рассылок и статус хода рассылки
  • В списке рассылок можно приостановить начатую рассылку или возобновить приостановленную
  • Можно выбирать стартовать или не стартовать рассылку сразу после её сохранения
  • Рассылка производится не сразу, а пачками по 20 писем (количество можно менять в конфиге). Для этого нужно поцепить на cron скрипт рассылки /plugins/mailing/include/cron/send-mail.php
  • Отправленные сообщения не отображаются в вашем списке сообщений до тех пор пока пользователь не ответит на это сообщение (вам ведь важна обратная связь с пользователями?).

Для того, чтобы сообщения отправлялись нужно поцепить на cron скрипт рассылки /plugins/mailing/include/cron/send-mail.php. У нас он запускается каждые 5ть минут:
*/5 * * * * /var/www/domain.ru/www/plugins/mailing/include/cron/send-mail.php

*http://ru.wikipedia.org/wiki/Cron

сайт.ru/mailing/ Рассылка сообщений
сайт.ru/mailing/list Список рассылок

Скачать и активировать.

Яндекс.Карты / Google Maps

Например, если вы захотите сделать что-то типо, gdecasino.org и подобных.


Плагин умеет управлять маркерами и категориями маркеров на карте, выводить карту на определенную страницу, выводить меню категорий маркеров.
Плагин работает, без лагов, я проверял. Поэтому и пишу тута, может кто не знает, не нашел в сраче, а он очень полезный ;)
Далее, я прокопипастю, то что писал автор.

Что такое категория маркеров?
Категория маркеров это некоторое свойство маркера, в котором определяется как будет выглядеть иконка маркера на карте.
Свойства категории:
  • — Название — любое текстовое название. Например, Офисы компании;
  • — Имя стиля — требуется для генерации карты, набор символов на латинице. Например, offices.
  • — Ссылка на иконку маркеров в категории — иконка маркера, которая появляется на карте при выборе категории. Здесь удобно пользоваться стандартными иконками Яндекс.Карт.

Что такое маркер?
Это значек и балун на карте, который задается следующими свойствами:
Название, широта, долгота, категория, адрес, телефон, ссылка на подробную информацию и ссылка на изображение в балуне. Увидеть где и какие свойства проявляются достаточно просто — поиграйтесь с демками.

Как можно настроить карту?
Для карты можно задать API ключ Яндекс.Карт, ширину, высоту, координаты центра, начальное приближение, любые из стандартных инструментов управления на выбор, которые сейчас включены на демке, а также строку поиска по объектам на карте.

Как работает поиск?

Стандартный элемент управления поиска ищет адреса в видимой области карты, а если ничего не найдено, то везде.


Поиск объекта на карте ищет объекты (маркеры) по названию маркера. При клике на результат поиска, на карте открывается балун найденного маркера.
Поиск объекта на карте использует для предложения результатов плагин jQuery, однако подключать дополнительную библиотеку не требуется — jQuery подгружается вместе с Яндекс.Картами.



Скачать последнюю стабильную, и которая помоему ушла в архив, т.е. наконец все лаги отточились.

Как запретить редактировать посты, где есть комментарии

Иногда люди которые дрочили не один год, у которых не одна сотня постов, из-за чего-то обижаются. Батхер или трололо. Или может они из инета сваливают в реал, искать девочек и менять жизнь. Короче такая хуйня всегда происходит. Еще с времен форумов :) Сам когда-то злился и от обиды «вытирал все присутствие себя», лет 7 назад, на каком-то phpbb форуме :)))

Ведь зачастую, на эмоциях могут снести очень полезные топики, путеводители и т.д.

Чтобы такой хуйни не было. То вот, решение, уже готовое под плагин. Скачать и активировать.

ограничение длинны топика

Длинна топика не может превышать 15000 симоволов. ©
Конечно сразу ответ, что нужно изменить параметр в config.php
$config['module']['topic']['max_length'] = 50000;  // на 50000 символов

Но это не поможет ;)

Открываем ActionTopic.class.php и находим блок
/**
                 * Проверяем есть ли содержание топика
                 */
                if (!func_check(getRequest('topic_text',null,'post'),'text',2,30000)) {
                        $this->Message_AddError($this->Lang_Get('topic_create_text_error'),$this->Lang_Get('error'));
                        $bOk=false;
                }

меняем на
/**
                 * Проверяем есть ли содержание топика
                 */
                if (!func_check(getRequest('topic_text',null,'post'),'text',2,Config::Get('module.topic.max_length'))) {
                        $this->Message_AddError($this->Lang_Get('topic_create_text_error'),$this->Lang_Get('error'));
                        $bOk=false;
                }

Делаем приветственное лс

Итак, добавляем в ActionRegistration.class.php
после действия, где создается персональный блог (строка 172 помоему)
public function SendWelcomeMessage(UserEntity_User $oUserTo,UserEntity_User $oUserFrom) {

$this->oViewerLocal->Assign('oUserTo',$oUserTo);
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);

$sBody=$this->oViewerLocal->Fetch("pm_reg.tpl"); 
$oTalk=new TalkEntity_Talk(); 
$oTalk->setUserId($oUserFrom->getId()); 
$oTalk->setTitle("Добро пожаловать!"); 
$oTalk->setText($sBody); 
$oTalk->setDate(date("Y-m-d H:i:s"));
$oTalk->setDateLast(date("Y-m-d H:i:s"));
$oTalk->setUserIp(func_getIp());
if ($oTalk=$this->Talk_AddTalk($oTalk)) {
$oTalkUser=new TalkEntity_TalkUser();
$oTalkUser->setTalkId($oTalk->getId());
$oTalkUser->setUserId($oUserTo->getId());
$oTalkUser->setDateLast(null);
$this->Talk_AddTalkUser($oTalkUser); 
}

}

и создаем соответсвующий notify.pm_reg.tpl в ВАШЕМ templates/skin/SKIN/
Привет!
Вы зарегистрировались на сайте <a href="{$DIR_WEB_ROOT}">123</a>!
У нас есть, это, это, а вот тут faq и т.д :)

Кланвары и мониторинг

Плагин кланваров, для каких-ниб кс-сообществ раз.
Скачать и активировать.

И парочка других модификаций кланваров.

Еще, плагин, вывода мониторинга игровых серверов. Просто в отдельный блок сайдбара.
Скачать и активировать.

Настройка игровых серверов осуществляется в файле config/config.php
Новый сервер нужно добавить в массив gs.servers
Config::Set('gs.servers', array(
	'cs16' => array(			             // - Уникальный идентификатор (для внутреннего использования в плагине)
		'title'		=> "Counter-Strike 1.6",     // - Название для отображения
		'host'		=> array("host"),	     // - Список IP-адресов сервера (в случае, если один и тот же сервер доступен по разным адресам)
		'port'		=> array("port"),	     // - Список соответствующих IP-адресам портов
		'class' 	=> "CounterStrike16",	     // - Имя класса обработчика сервера (для данного обработчика, например, модуль называется PluginGameServers_ModuleCounterStrike16)
		'link'		=> "http://cs16.example.com" // - Ссылка на страницу с описанием сервера
	),
));

Делаем поиск Яндекса вместо Sphinx

Настраиваем форму поиска Яндекса site.yandex.ru/new_info.xml
Выбираем «оформление результатов поиска — в iframe странице» и пишем желаемый адрес страницы результатов поиска, например yoursite.ru/page/poisk

Копируем полученный html-код поисковой формы и вставляем его в sidebar.tpl вместо строк
<div class="block">
        <form action="{router page='search'}topics/" method="GET">
        <input class="text" type="text" onblur="if (!value) value=defaultValue" onclick="if (value==defaultValue) value=''" value="{$aLang.search}" name="q" />
        <input class="button" type="submit" value="{$aLang.search_submit}" />
        </form>
</div>

заключаем этот код в тег {literal}{/literal}

Создаем статическую страницу poisk(или же через запись, не суть важно). Для этого нужно активировать плагин static page. В поле «Текст» новой страницы снова вставляем код поисковой формы и затем второй код от Яндекса, примерно такой:
<div id="yandex-results-outer" onclick="return {encoding: ''}"></div>
<script type="text/javascript" src="http://site.yandex.net/load/site.js" charset="utf-8"></script>


Если с css проблемы.
в начале кода, в редакторе статической страницы
<div class="yandexform" style="width: 960px;" onclick="return {type: 2, logo: 'rb', arrow: false, webopt: false, websearch: false, bg: '#CCE5FF', fg: '#000000', fontsize: 14, suggest: true, site_suggest: true, encoding: ''}">

Автоподключение свежерегнутых юзеров к коллективным блогам, по выбору

Иногда есть домены c livestreet, где владельцу сайта хотелось бы сделать так, чтобы все новые пользователи автоматически присоединялись бы к заданным блогам. (а это и авто-рассылка на email и прочее, если включено в настройках)

После установки, админам будет доступна страничка вашсайт/mhb на которой в списке блогов можно проставить галочки какие блоги автоподключать и от каких запретить отключаться. :)

Скачать плагин можно тута.

Sticky Topics - Прикрепленные топики

ваш_сайт/admin/stickytopics – Админка.
Зайти могут не только администраторы всего сайта, но и пользователи, являющиеся администраторами в каких-либо блогах. А так же и обычные пользователи — администраторы своих персональных блогов.

Можно запретить админам блогов использовать настройку прикрепления, отредактировав файл config/config.php и установив параметр allow_blog_admins в значение false. Для запрета обычным пользователям прикреплять записи в их персональных блогах, следует установить параметр allow_personal_blogs в false.

В двигле.
Прикрепленные топики на главной странице сайта.
Открываем файл из каталога шаблона actions/ActionIndex/index.tpl
Перед строчкой
{include file='topic_list.tpl'}

Вставить строчку
{hook run='get_sticky_topics' aTopics=$aTopics}

Чтобы убрать прикрепленные топики со страниц после первой, следует использовать такой вызов хука:
{hook run='get_sticky_topics' aTopics=$aTopics aPaging=$aPaging}

Еще может быть случай, когда прикрепленные топики требуется вывести как-то по-другому, нежели стандартной лентой. Может быть просто названия. Тогда к вызову хука надо добавить параметр outName, который задает имя массива, в который будут помещаться прикрепленные записи.
{hook run='get_sticky_topics' aTopics=$aTopics aPaging=$aPaging outName=aSticky}
{if $aSticky}
{foreach from=$aSticky item=oTopic}
{$oTopic->getTitle()|escape:html}
{/foreach}
{/if}

Тогда в результате работы хука в массиве шаблона aSticky окажутся прикрепленные топики, а массив aTopics останется неизменным. Если, все же, из массива aTopics требуется убрать прикрепленные топики, то хуку надо задать параметр removeSticky
{hook run=’get_sticky_topics’ aTopics=$aTopics aPaging=$aPaging outName=aSticky removeSticky=true}

Прикрепленные топики на странице конкретного блога.
Для того, чтобы вывести прикрепленные топики для каждого блога надо редактировать файл шаблона action/ActionBlog/blog.tpl
Единственное, чем отличается использование хука в конкретных блогах это, собственно, указание из какого, конкретно, блога брать записи. Делается это с помощью параметра blog_id:
{hook run='get_sticky_topics' aTopics=$aTopics blog_id=$oBlog->getId()}

Такой вызов хука в шаблоне блога прикрепит топики для текущего блога.
Все случаи, описанные для главной страницы сайта применимы и для конкретного блога, при добавлении параметра blog_id

Прикрепленные топики в персональном блоге пользователя
Тут надо менять шаблон action/ActionMy/blog.tpl
Для вывода прикрепленных топиков к персональному блогу требуется задать параметр blog_id равным -1 и указать дополнительный параметр oUser в который передать объект профиля пользователя. Для экшена ActionMy это объект oUserProfile
{hook run='get_sticky_topics' aTopics=$aTopics blog_id=-1 oUser=$oUserProfile}


Скачать плагин можно тута.

Делаем хорошую каптчу

livestreet captcha yandex

Скачиваем и распаковываем архив.
Папку Zloy_Taburet кладем в engine/lib/external/
Изображения zloy_taburet_arrow.gif и zloy_taburet_post.gif кладем в папку images вашего шаблона:
для шаблона new — \templates\skin\new\images\

Находим в файле \templates\language\russian.php строчку:
'registration_captcha' => 'Введите цифры и буквы',

и меняем на:
'registration_captcha' => 'Введите цифры слева',


Вставляем капчу в шаблон:

Для шаблона NEW
Находим в файле \templates\skin\new\actions\ActionRegistration\index.tpl:
{$aLang.registration_captcha}:<br />
                        <img src="{$DIR_WEB_ROOT}/classes/lib/external/kcaptcha/index.php?{$_sPhpSessionName}={$_sPhpSessionId}">
                        <p><input type="text" class="input-text" style="width: 80px;" name="captcha" value="" maxlength=3 /></p>

и меняем на:
<div class="zloy_taburet">
             <img class="taburet" src="{cfg name='path.root.engine_lib'}/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}" onclick="this.src='{cfg name='path.root.engine_lib'}/classes/lib/external/Zloy_Taburet/index.php?{$_sPhpSessionName}={$_sPhpSessionId}&n='+Math.random(); return false;" alt="" />
                                <img class="captcha" src="{cfg name='path.static.skin'}/images/zloy_taburet_arrow.gif" alt="" />
                                <div class="zloy_taburet_license">
                                        <label for="zloy_taburet_name">{$aLang.registration_captcha}:</label><br />
                                        <p><input type="text" class="input-text" style="width:80px;" name="zloy_taburet_name" value="" maxlength="6" /></p>
                                </div>
                                <div class="clear"></div>
                        </div>


Находим в файле \templates\skin\developer\css\style.css строчку:
.center-block .error { color: #f20909; }

и после нее добавляем это:
.center-block .zloy_taburet { height:74px; background:url("../images/zloy_taburet_post.gif") no-repeat 0px 0px; }
.center-block .zloy_taburet img.taburet { width:200px; height:60px; float:left; padding:7px 0 7px 5px; cursor:pointer; }
.center-block .zloy_taburet img.captcha { float:left; margin:30px 8px 0 15px; }
.center-block .zloy_taburet .zloy_taburet_license { float:left; margin-top:4px;}
.center-block .zloy_taburet .clear { clear:both; }


Находим в файле \classes\actions\ActionRegistration.class.php строчку:
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('captcha'))) {

и меняем на:
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower(getRequest('zloy_taburet_name'))) {


Если вам не нужна старая капча, то удалите папку \engine\lib\external\kcaptcha\