2) какой полный путь до класса PluginMyPlugin_ModuleUser_EntityUser?
3) в шаблоне инклудить нужно с указанием полного пути до шаблона, для его получения можно использовать метод
Если нет желания перетаскивать стандартные блоки в конфиг менеджера, то ими вполне можно рулить непосредственно в стандартном конфиге (т.е. конфиг-файл сайта). Там есть такое вот:
Вообщем сам разобрался с плагином, предлагаю примерный вариант (рабочий) взаимодействия плагина 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 запрос для переноса юзеров
livestreet.ru/blog/dev_livestreet/12.html
Тут разбирались, я полагаю конечно с этого момента что-то изменилось… но в целом
Рейтинг — голоса за пользователя
Сила — голоса за его топики и комменты
А что было? Какая проблема? Как это решить?
Для воспроизведения проблемы:
1. Заходим под учеткой ВКонтакте, про которую плагин не знает.
2. Попадаем на «Продолжение авторизации». тут начинается интересное.
3. Не продолжая авторизацию нажимаем на заголовок (h1) названия сайта для перехода на главную страницу.
4. Заходим на главную и нас тут же перекидывает назад на продолжение авторизации.
Замкнутый круг.
____________________________
5. Заходим в управление куками (в Опере это Инструменты->Дополнительно->Управление cookies), ищем наш домен и удаляем печеньку vk_app_(id).
Что-то как-то кеш у меня работает странно.
1. Создал блог. Минут 30 не давало зайти на страницу блога «Ошибка: 404»
2. Отредактировал статью: изменения в базу сохранились. страничка не обновилась
3. Добавил комментарий: через несколько минут зашел на страничку — комментария нет., нажал на «стрелочки» слева — появился как непрочитанный.
идем в ( 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)там пишем:
Конкретно в 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 — искомый айдишник блога.
Если совсем грамотно (и универсально) делать, то можно было бы вынести такие блоги в отдельную таблицу БД, написав соотвествующие обработчики.
«Стандартный» хук и «делегирующий» хук *_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;
}
А вот тут мы и текст меняем (меняя содержимое передаваемого аргумента), и позволяем его обрабатывать дальше.
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
Такой вопрос: что делать, если нужно незначительно изменить системные модули и экшены, нужно ли создавать их измененные копии и делегировать их?
Например, есть плагин расширенной юзер панели (с новыми функциями и т.п.) и нужно добавить ещё одно поле (допустим, Город) при регистрации нового юзера. Соответственно необходимо добавить по одной-две строки в файлы /templates/skin/new/actions/ActionRegistration/index.tpl, /classes/actions/ActionRegistration.class.php, /classes/modules/user/mapper/UserMapper.class.php. Как лучше поступить в таком случае? Напрямую редактировать эти файлы или создавать их измененные копии внутри плагина ImprovedPanel?
Аналогия мне нравится. поставил бы плюс, если б мог :)
да и пофиг. не могу и не могу.
то есть развивая идею — Сила это вообще возможность действовать, создавать, если бы сила была отрицательной то по идее это был бы заблокированный аккаунт, «твоя степень влияние в сети на происходящее», опыт, тренированность, хотя как это может быть опыт если он оценивается…
Рейтинг — это оценка действий пользователя, вектор силы, карма пользователя, при отрицательной карме его силу (действия) искусственно ограничивают. то есть каковы действия этого пользователя исходя из оценки его другими пользователями. то есть то как вашу силу воспринимают остальные участники сообщества.
Гм. а прикольно было бы создавать антиблоги :) ну по аналогии с темной силой, раз уж я туда попал ))))
темного властелина избрать!
темные топики… гы-гы.
и темная сторона силы поглотила его :)
2) какой полный путь до класса PluginMyPlugin_ModuleUser_EntityUser?
3) в шаблоне инклудить нужно с указанием полного пути до шаблона, для его получения можно использовать метод
можно отдельно делегировать шаблоны:
И запись 'stream'=>array('priority'=>100) как раз и задает приоритет блоку stream.
Таким образом, я использую 2 Template блока, в конфиге они стоят первым и пятым (первый для Google рекламы, пятый для баннера). У вас их может и не быть вовсе или может быть другое использование Template блоков (читаем выше->топик).
Все, что стоит за двумя // можно не вписывать, просто лень было удалять ))
Для начала необходимо таблицу юзеров php-nuke импортировать в базу LS (т.е. в базе будут 2 таблицы юзеров: prefix_user пользователи LS, prefix_users пользователи php-nuke)
1. С учетом совета kks запрос для переноса юзеров
prefix может быть другим
2. Запрос создание персональных блогов новых пользователей без изменений
3. Преобразование формата даты регистрации юзеров к требуемому в LS (сохранить в файл, запустить скрипт)
?>
Т.к. метод хранения паролей у обоих систем одинаков, юзеры могут входить на LS под своими старыми паролями
В данное время пытаюсь устроить общий вход, выход, регистрацию юзеров у двух систем.
Тут разбирались, я полагаю конечно с этого момента что-то изменилось… но в целом
Рейтинг — голоса за пользователя
Сила — голоса за его топики и комменты
Многое еще проясняет чтение комментов в конфиге
Для воспроизведения проблемы:
1. Заходим под учеткой ВКонтакте, про которую плагин не знает.
2. Попадаем на «Продолжение авторизации». тут начинается интересное.
3. Не продолжая авторизацию нажимаем на заголовок (h1) названия сайта для перехода на главную страницу.
4. Заходим на главную и нас тут же перекидывает назад на продолжение авторизации.
Замкнутый круг.
____________________________
5. Заходим в управление куками (в Опере это Инструменты->Дополнительно->Управление cookies), ищем наш домен и удаляем печеньку vk_app_(id).
Только тогда можно будет нормально зайти на сайт.
1. Создал блог. Минут 30 не давало зайти на страницу блога «Ошибка: 404»
2. Отредактировал статью: изменения в базу сохранились. страничка не обновилась
3. Добавил комментарий: через несколько минут зашел на страничку — комментария нет., нажал на «стрелочки» слева — появился как непрочитанный.
Что такое? куда копать?
сразу после этого идем в ( templates / skin / new / block.stream.tpl)там пишем:
Все должно ровно отображаться, шаблон NEW на DEVEPOLER не пользовал, не знаю как там будет отображать.
В /classes/modules/topic/mapper/Topic.mapper.class.php правим метод buildFilter(), добавляя туда следующее:
В /classes/modules/topic/Topic.class.php правим метод GetTopicsGood(), добавив в массив фильтра:
, где 13 — искомый айдишник блога.
Если совсем грамотно (и универсально) делать, то можно было бы вынести такие блоги в отдельную таблицу БД, написав соотвествующие обработчики.
Я бы в таком случае иначе сделал бы. Предлагаю завести некий контейнер статуса выполнения метода, и в нем указывать, надо продолжать выполнение цепочки хуков и самого метода или нет. Плюс — вызов всех параметров по ссылке. Тогда, приведенный выше пример мог бы выглядеть так:
Возвращаем обработанный текст и прекращаем его дальнейшую обработку.
Но если хотим продолжить обработку после нашего хука, то так:
А вот тут мы и текст меняем (меняя содержимое передаваемого аргумента), и позволяем его обрабатывать дальше.
в profile.tpl
не отмечен метками [hack] авторский блок
будьте внимательны
его тоже надо перенести в ваш темплейт
в условия WHERE надо добавить target_type='topic'
т.к. иначе будет искаться в том числе и по личным сообщениям (что само по себе очень стремно) и в случае найденного, т.к. у объекта Talk нет метода getBlog(), будет ругаться на это (или не будет, если вывод ошибок отключен, но всеравно поиск по комментам работать не будет).
Вообщем, запрос должен быть такой:
Например, есть плагин расширенной юзер панели (с новыми функциями и т.п.) и нужно добавить ещё одно поле (допустим, Город) при регистрации нового юзера. Соответственно необходимо добавить по одной-две строки в файлы /templates/skin/new/actions/ActionRegistration/index.tpl, /classes/actions/ActionRegistration.class.php, /classes/modules/user/mapper/UserMapper.class.php. Как лучше поступить в таком случае? Напрямую редактировать эти файлы или создавать их измененные копии внутри плагина ImprovedPanel?
да и пофиг. не могу и не могу.
то есть развивая идею — Сила это вообще возможность действовать, создавать, если бы сила была отрицательной то по идее это был бы заблокированный аккаунт, «твоя степень влияние в сети на происходящее», опыт, тренированность, хотя как это может быть опыт если он оценивается…
Рейтинг — это оценка действий пользователя, вектор силы, карма пользователя, при отрицательной карме его силу (действия) искусственно ограничивают. то есть каковы действия этого пользователя исходя из оценки его другими пользователями. то есть то как вашу силу воспринимают остальные участники сообщества.
Гм. а прикольно было бы создавать антиблоги :) ну по аналогии с темной силой, раз уж я туда попал ))))
темного властелина избрать!
темные топики… гы-гы.
и темная сторона силы поглотила его :)
Новая версия очень удобная, я как раз переписываю еще кучку сервисов под новый движок.