+0.90
Рейтинг
2.47
Сила
  • avatar ort
  • 1
1) можно указать массив
'path' => array('path1','path2')

2) какой полный путь до класса PluginMyPlugin_ModuleUser_EntityUser?
3) в шаблоне инклудить нужно с указанием полного пути до шаблона, для его получения можно использовать метод
Plugin::GetTemplatePath()

можно отдельно делегировать шаблоны:
protected $aDelegates=array(
   'template'=>array('actions/ActionProfile/whois.tpl'),       
);
Если нет желания перетаскивать стандартные блоки в конфиг менеджера, то ими вполне можно рулить непосредственно в стандартном конфиге (т.е. конфиг-файл сайта). Там есть такое вот:
$config['block']['rule_index_blog'] = array(
  'path' => ...
  'action'  => ...
  'blocks'  => array(
    'right' => array('stream'=>array('priority'=>100),...)
  ),
  'clear' => false,
);
И запись 'stream'=>array('priority'=>100) как раз и задает приоритет блоку stream.
Вообщем сам разобрался с плагином, предлагаю примерный вариант (рабочий) взаимодействия плагина aceBlockManager со всеми имеющимися на данный момент блоками (стандартными блоки, входящие в состав движка, блоками плагина Дополнительные блоки и блоки самого плагина aceBlockManager) Повторяю, данный способ это мой варинат взаимодействия и размещения блоков по приоритетности, у вас он может быть своим. Вообщем вдруг кому пригодится…

/***
 * Параметры модуля
 */

/***
 * Сброс блоков - сбрасывать/не сбрасывать установку блоков, которая 
 * задается во actions
 * 
 * Например:
 *   $config['clear_blocks'] = true; // Сбросить все блоки
 *
 *   $config['clear_blocks'] = false; // Не сбрасывать блоки
 *
 *   $config['clear_blocks'] = array('include'=>'index,blog');
 *     // Cбрасывать блоки, которые заданы в actions index и blog
 *
 *   $config['clear_blocks'] = array('exclude'=>'admin, people, profile');
 *     // Cбрасывать блоки во всех actions, кроме admin и profile
 */
$config['clear_blocks'] = false;

$config['clear_blocks'] = array('include'=>'index,blog,personal_blog'); // Cбрасывать блоки, которые заданы в actions index и blog

$config['blocks'][]=array(
        'block'=>'template', // название блока
        'position'=>'right', // позиционирование блока
        'params'=>array(
        'plugin'=>'aceblockmanager', //
         //'title'=>'title of template block',
         'file'=>'block.google.tpl',
            ),
        'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'top', 'topic', 'question', 'link', 'blog/add', 'adsense', 'blogs', 'my'),
);
$config['blocks'][]=array(
  'block'=>'stream', // название блока
  'position'=>'right', // позиционирование блока
  'include'=>'index,blog,personal_blog', // на каких страницах показывать
  //'exclude'=>'top', // на каких страницах НЕ показывать

);
$config['blocks'][]=array(
  'block'=>'tags', // название блока
  'position'=>'right', // позиционирование блока
  'include'=>'index,blog,personal_blog', // на каких страницах показывать
  //'exclude'=>'top', // на каких страницах НЕ показывать
  
);
$config['blocks'][]=array(
  'block'=>'blogs', // название блока
  'position'=>'right', // позиционирование блока
  'include'=>'index,blog,personal_blog', // на каких страницах показывать
  //'exclude'=>'top', // на каких страницах НЕ показывать
  
);
$config['blocks'][]=array(
        'block'=>'template', // название блока
        'position'=>'right', // позиционирование блока
        'params'=>array(
        'plugin'=>'aceblockmanager', //
            //'title'=>'title of template block',
            //'text'=>'text1 text1 text1',
            //'footer'=>'footer1',
         'file'=>'block.reklama.tpl',
            ),
        'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'top', 'topic', 'question', 'link', 'blog/add', 'adsense', 'blogs', 'my'),
);
$config['blocks'][]=array(
        'block'=>'TopTopics', // название блока
        'position'=>'right', // позиционирование блока
        'params'=>array(
        'plugin'=>'lsblocks', //
         ),
        'include'=>'index', // на каких страницах показывать
);
$config['blocks'][]=array(
        'block'=>'TopUsers', // название блока
        'position'=>'right', // позиционирование блока
        'params'=>array(
        'plugin'=>'lsblocks', //
         ),
        'include'=>'index', // на каких страницах показывать
);
$config['blocks'][]=array(
        'block'=>'usersonline', // название блока
        'position'=>'right', // позиционирование блока
        'params'=>array(
        'plugin'=>'aceblockmanager', //
        'users_max'=>20,    // Максимальное число отображаемых пользователей
        'users_period'=>5*60,  // Время, в течение которого пользователь считается в онлайне (сек)
         'renew_time'=>5,    // Время обновления (сек)
            ),
        'exclude'=>array('admin', 'blog', 'personal_blog', 'settings', 'profile', 'talk', 'people', 'top', 'my', 'topic', 'question', 'link', 'blog/add', 'adsense', 'blogs'),
);

return $config;
// EOF

Таким образом, я использую 2 Template блока, в конфиге они стоят первым и пятым (первый для Google рекламы, пятый для баннера). У вас их может и не быть вовсе или может быть другое использование Template блоков (читаем выше->топик).
Все, что стоит за двумя // можно не вписывать, просто лень было удалять ))
Может кому понадобиться готовое решение по переносу юзеров с php-nuke на LS

Для начала необходимо таблицу юзеров php-nuke импортировать в базу LS (т.е. в базе будут 2 таблицы юзеров: prefix_user пользователи LS, prefix_users пользователи php-nuke)
1. С учетом совета kks запрос для переноса юзеров
INSERT INTO prefix_user (user_login, user_password, user_mail, user_date_register, user_ip_register, user_activate, user_profile_name, user_profile_country, user_profile_site, user_profile_icq, user_profile_about) SELECT username, user_password, user_email, user_regdate, last_ip, user_active, name, user_from, user_website, user_icq, CONCAT_WS(", ",user_interests, user_occ) FROM prefix_users;

prefix может быть другим
2. Запрос создание персональных блогов новых пользователей без изменений
INSERT INTO prefix_blog (user_owner_id, blog_title, blog_description) SELECT user_id, CONCAT('Блог им. ', user_login), '' FROM prefix_user

3. Преобразование формата даты регистрации юзеров к требуемому в LS (сохранить в файл, запустить скрипт)


<?php
error_reporting (E_ALL ^ E_NOTICE);
ini_set("max_execution_time", "300000");
mysql_connect("localhost", "root", "")
        or die("Could not connect");
mysql_select_db("name_db");
$result = mysql_query("SELECT username, user_regdate FROM prefix_users");
while(list($username, $user_regdate) = mysql_fetch_array($result))  {
$user_regdate = date("Y-m-d H:i:s", strtotime ($user_regdate));
mysql_query("UPDATE prefix_user SET user_date_register='".$user_regdate."' WHERE user_login='".$username."'");
} 

?>

Т.к. метод хранения паролей у обоих систем одинаков, юзеры могут входить на LS под своими старыми паролями

В данное время пытаюсь устроить общий вход, выход, регистрацию юзеров у двух систем.
В каталоге тут — livestreet.ru/addons/122/
livestreet.ru/blog/dev_livestreet/12.html
Тут разбирались, я полагаю конечно с этого момента что-то изменилось… но в целом
Рейтинг — голоса за пользователя
Сила — голоса за его топики и комменты

Многое еще проясняет чтение комментов в конфиге
А что было? Какая проблема? Как это решить?
Для воспроизведения проблемы:
1. Заходим под учеткой ВКонтакте, про которую плагин не знает.
2. Попадаем на «Продолжение авторизации». тут начинается интересное.
3. Не продолжая авторизацию нажимаем на заголовок (h1) названия сайта для перехода на главную страницу.
4. Заходим на главную и нас тут же перекидывает назад на продолжение авторизации.
Замкнутый круг.
____________________________
5. Заходим в управление куками (в Опере это Инструменты->Дополнительно->Управление cookies), ищем наш домен и удаляем печеньку vk_app_(id).

Только тогда можно будет нормально зайти на сайт.
  • avatar ort
  • 0
На хостинге подключен по умолчанию Zend Framework? Если да, то нужно обратиться к хостеру, чтоб его отключили.
Что-то как-то кеш у меня работает странно.
1. Создал блог. Минут 30 не давало зайти на страницу блога «Ошибка: 404»
2. Отредактировал статью: изменения в базу сохранились. страничка не обновилась
3. Добавил комментарий: через несколько минут зашел на страничку — комментария нет., нажал на «стрелочки» слева — появился как непрочитанный.

Что такое? куда копать?
  • avatar avadim
  • 1
хук для подключения JS и CSS. К примеру через плагин какой-то нужно подлючить свой JS.
Есть и давно: livestreet.ru/blog/dev_livestreet/2826.html
Вы забыли, что в лс0,4 теперь есть обязательный параметр ls_security_key — ищите в движке, в любой форме он есть — и делайте по аналогии.
идем в ( classes / blocks / BlockSteam.class.php)там пишем:


class BlockStream extends Block {
        public function Exec() {
                if ($oTopics=$this->Topic_GetTopicsLast(BLOCK_STREAM_COUNT_ROW)) {
                        $this->Viewer_Assign('oTopics',$oTopics);
                        $sTextResult=$this->Viewer_Fetch("block.stream_topic.tpl");
                        $this->Viewer_Assign('sStreamTopic',$sTextResult);
                }
        }
}


сразу после этого идем в ( templates / skin / new / block.stream.tpl)там пишем:



<div class="block stream">
        
        <div class="tl"><div class="tr"></div></div>
                <div class="cl"><div class="cr">
                       
                 <h1>{$aLang.block_stream}</h1>
                       
        <ul class="block-nav">                                          
                <li class="active"><strong></strong><a href="#" id="block_stream_topic" onclick="lsBlockStream.toggle(this,'topic_stream'); return false;">{$aLang.block_stream_topics}</a></li>
                <li><a href="#" id="block_stream_comment" onclick="lsBlockStream.toggle(this,'comment_stream'); return false;">{$aLang.block_stream_comments}</a><em></em></li>
        </ul>                                   
        
        <div class="block-content">
                {literal}
                        <script language="JavaScript" type="text/javascript">
                        var lsBlockStream;
                        window.addEvent('domready', function() { 
                                lsBlockStream=new lsBlockLoaderClass();                                                 
                        });
                        </script>
                {/literal}
                {$sStreamTopic}
       </div>
        
                 <div class="right"><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_COMMENTS}/">{$aLang.block_stream_comments_all}</a> | <a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_RSS}/allcomments/">RSS</a></div>

                                </div></div>
                                <div class="bl"><div class="br"></div></div>
                 </div>



Все должно ровно отображаться, шаблон NEW на DEVEPOLER не пользовал, не знаю как там будет отображать.
  • avatar Wizard
  • 1
Конкретно в 0.3.1 это решается так:
В /classes/modules/topic/mapper/Topic.mapper.class.php правим метод buildFilter(), добавляя туда следующее:
if (isset($aFilter['exclude_blog_id']) and is_array($aFilter['exclude_blog_id'])) {
      $sWhere .= " AND t.blog_id not in (" . join(", ", $aFilter['exclude_blog_id']) . ")";
    }


В /classes/modules/topic/Topic.class.php правим метод GetTopicsGood(), добавив в массив фильтра:
'exclude_blog_id' => array(13),

, где 13 — искомый айдишник блога.
Если совсем грамотно (и универсально) делать, то можно было бы вынести такие блоги в отдельную таблицу БД, написав соотвествующие обработчики.
  • avatar Asphix
  • 2
Задача ТСа решается небольшими поправками в маппере и классе модуля topics. А конкретнее с поправками фильтров :)
  • avatar avadim
  • 1
«Стандартный» хук и «делегирующий» хук *_before в общем-то абсолютно одинаковы, и отличаются только тем, что «стандартных» может быть сколько угодно, а «делегирующий» — только один, так?

Я бы в таком случае иначе сделал бы. Предлагаю завести некий контейнер статуса выполнения метода, и в нем указывать, надо продолжать выполнение цепочки хуков и самого метода или нет. Плюс — вызов всех параметров по ссылке. Тогда, приведенный выше пример мог бы выглядеть так:
public function testHook(&$aVars) {
  Engine::setMethodStatus(HOOK_BREAK);
  return 'Topic text > '.$aVars[0];
}
Возвращаем обработанный текст и прекращаем его дальнейшую обработку.

Но если хотим продолжить обработку после нашего хука, то так:
public function testHook(&$aVars) {
  $aVars[0] = 'Topic text > '.$aVars[0];
  Engine::setMethodStatus(HOOK_CONTINUE);
  return;
}
А вот тут мы и текст меняем (меняя содержимое передаваемого аргумента), и позволяем его обрабатывать дальше.
  • avatar zoltes
  • 0
памятка:

в profile.tpl
не отмечен метками [hack] авторский блок

<p>
                    <label for="profile_country">{$aLang.settings_profile_country}:</label><br />
                    <select id="country_list" onChange="country_list_action()" name="profile_country" class="w300">
                    	<option value="">- {$aLang.settings_profile_country_not_selected} -</option>
                        {foreach from=$aCountryList key=k item=v}
                        <option value="{$v.name}" id="cid{$v.id}" {if $v.name==$oUserCurrent->getProfileCountry()}selected{/if}>{$v.name}</option>
					    {/foreach}
					    <option value="_full_list_">- {$aLang.settings_profile_full_list} -</option>
                    </select>
                    <img src="{$DIR_STATIC_SKIN}/images/ajax.gif" id="countryAjax" style="float: left; position: relative; top: 7px; display: none" /><br />
					
					<span id="city_list_div" style="display:none">
						<label for="profile_city">{$aLang.settings_profile_city}:</label><br />
						<select id="city_list" onChange="city_list_action()" name="profile_city" class="w300">
	                    <option value="">- {$aLang.settings_profile_city_not_selected} -</option>
	                    </select>
	                    <input type="text" class="w300" id="city_list_input" style="display:none" />
	                    <br />
					</span>
				</p>


будьте внимательны
его тоже надо перенести в ваш темплейт
  • avatar kruft
  • 1
Спасибо огромное, но в запрос комментов
SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_comment \
                        WHERE comment_id>=$start AND comment_id<=$end

в условия WHERE надо добавить target_type='topic'

т.к. иначе будет искаться в том числе и по личным сообщениям (что само по себе очень стремно) и в случае найденного, т.к. у объекта Talk нет метода getBlog(), будет ругаться на это (или не будет, если вывод ошибок отключен, но всеравно поиск по комментам работать не будет).

Вообщем, запрос должен быть такой:
SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_comment \
                        WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end
  • avatar Ajaxy
  • 0
Такой вопрос: что делать, если нужно незначительно изменить системные модули и экшены, нужно ли создавать их измененные копии и делегировать их?
Например, есть плагин расширенной юзер панели (с новыми функциями и т.п.) и нужно добавить ещё одно поле (допустим, Город) при регистрации нового юзера. Соответственно необходимо добавить по одной-две строки в файлы /templates/skin/new/actions/ActionRegistration/index.tpl, /classes/actions/ActionRegistration.class.php, /classes/modules/user/mapper/UserMapper.class.php. Как лучше поступить в таком случае? Напрямую редактировать эти файлы или создавать их измененные копии внутри плагина ImprovedPanel?
  • avatar radimir
  • 0
Аналогия мне нравится. поставил бы плюс, если б мог :)
да и пофиг. не могу и не могу.
то есть развивая идею — Сила это вообще возможность действовать, создавать, если бы сила была отрицательной то по идее это был бы заблокированный аккаунт, «твоя степень влияние в сети на происходящее», опыт, тренированность, хотя как это может быть опыт если он оценивается…
Рейтинг — это оценка действий пользователя, вектор силы, карма пользователя, при отрицательной карме его силу (действия) искусственно ограничивают. то есть каковы действия этого пользователя исходя из оценки его другими пользователями. то есть то как вашу силу воспринимают остальные участники сообщества.

Гм. а прикольно было бы создавать антиблоги :) ну по аналогии с темной силой, раз уж я туда попал ))))
темного властелина избрать!
темные топики… гы-гы.
и темная сторона силы поглотила его :)
Нет, я там все сам для себя пишу.
Новая версия очень удобная, я как раз переписываю еще кучку сервисов под новый движок.