Вы не зашли.
Подскажите, как вывести в профиль пользователя (плагин uprofile 0.12) статус: онлайн или оффлайн пользователь?
по идее для этого надо использовать плагин k_online. Мне, правда, не приходилось
Или, если подойдет способ попроще (считаем, что онлайн, если входил меньше 15 мин назад):
1. плагин uprofile.php - ищем строку 56 в uprofile_showProfile ("$tVars = array(" - это формирование переменных для вывода в шаблон).
Перед ней добавляем код:
$last = intval((time() - $urow['last'])/60);
if ($last < 15) {
$online = 'сейчас на сайте';
} else if ($last < 60) {
$online = 'заходил ' . $last . ' минут назад';
} else {
$online = 'оффлайн';
};
2. после строки 56, т. е. внутри массива переменных, добавляем:
'online' => $online,
3. в шаблоне users.tpl добавляем вывод:
Онлайн: {{ user.online }}
И как настроить вывод даты как в общих настройках CMS?
открываем /engine/plugins/uprofile/uprofile.php. За вывод шаблона users.tpl отвечает функция uprofile_showProfile.
Находим там строки:
'last' => ($urow['last'] > 0) ? LangDate("l, j Q Y - H:i", $urow['last']) : $lang['no_last'],
'reg' => langdate("j Q Y", $urow['reg']),
И меняем маску вывода времени в langdate на нужную. Где "l, j Q Y - H:i" - день недели, число, месяц, год, час, минута.
legenda пишет:плагин уже сделали, точнее передалали из одного существующего, если кому надо качайте
http://photoload.ru/data/04/5c/f3/045cf … a8e_pv.jpg
Т.е. плагин при включении не создает таблицы согласно NG CMS
Версия 20150123-0005-ngcms-core
создавать их не надо, они созданы уже. дело в том, что там захардкодили префикс таблицы в запросе.
Вместо этого:
$row = $mysql->query("select distinct u.id, name, count(distinct n.id) as s, sum(n.com) as s_c,
sum(distinct n.views) as c_v, (sum(distinct n.views)/count(distinct n.id)) as k
from 2z_users as u, 2z_news as n
WHERE u.id=n.author_id and (from_unixtime(postdate) > '$date1')
and (from_unixtime(postdate) < '$date2') and n.approve = '1'
group by u.id, name order by s desc");
$row1 = $mysql->query("select c.id as i,c.name as na,count(distinct n.id) as su,sum(views) as n_v, sum(views)/count(distinct n.id) as koefi from 2z_category as c, 2z_news as n
Where c.id=n.catid and (from_unixtime(postdate) > '$date1')
and (from_unixtime(postdate) < '$date2')
group by c.id
order by n_v desc
limit 20");
$row2 = $mysql->query("select distinct id,title,alt_name,views as v_n FROM 2z_news
where from_unixtime(postdate) > '$date1' and FROM_UNIXTIME(postdate) < '$date2'
order by views desc
limit 20");
надо писать так:
$row = $mysql->query("select distinct u.id, name, count(distinct n.id) as s, sum(n.com) as s_c,
sum(distinct n.views) as c_v, (sum(distinct n.views)/count(distinct n.id)) as k
from ".prefix."_users as u, ".prefix."_news as n
WHERE u.id=n.author_id and (from_unixtime(postdate) > '$date1')
and (from_unixtime(postdate) < '$date2') and n.approve = '1'
group by u.id, name order by s desc");
$row1 = $mysql->query("select c.id as i,c.name as na,count(distinct n.id) as su,sum(views) as n_v, sum(views)/count(distinct n.id) as koefi from ".prefix."_category as c, ".prefix."_news as n
Where c.id=n.catid and (from_unixtime(postdate) > '$date1')
and (from_unixtime(postdate) < '$date2')
group by c.id
order by n_v desc
limit 20");
$row2 = $mysql->query("select distinct id,title,alt_name,views as v_n FROM ".prefix."_news
where from_unixtime(postdate) > '$date1' and FROM_UNIXTIME(postdate) < '$date2'
order by views desc
limit 20");
т. к. константа prefix отвечает за префикс таблицы (задается по установке, по умолчанию ng).
То есть я редактирую main и user и заменяю их на осмысленные русские строки?
в этих файлах формат "имя переменной = значение". Значение - русская строка. Открой и увидишь.
При желании, конечно, можно вместо переменных в шаблоне прописать просто текст, я у себя так и сделал. Вот пример (шаблон users.tpl):
<h3>Профиль пользователя {{ user.name }}</h3>
<table class="table">
<tr>
<td>Зарегистрирован</td>
<td>{{ user.reg }}</td>
</tr>
<tr>
<td>Последний вход</td>
<td>{{ user.last }}</td>
</tr>
<tr>
<td>Записей</td>
<td>{{ user.news }}</td>
</tr>
<tr>
<td>Комментариев</td>
<td>{{ user.com }}</td>
</tr>
<tr>
<td>Имя и фамилия</td>
<td>{{ p.xfields.realname.value }}</td>
</tr>
<tr>
<td>Сайт</td>
<td>{{ user.site }}</td>
</tr>
<tr>
<td>Откуда</td>
<td>{{ user.from }}</td>
</tr>
<tr>
<td>Skype</td>
<td>{{ p.xfields.skype.value }}</td>
</tr>
<tr>
<td>Немного о себе</td>
<td>{{ user.info }}</td>
</tr>
</table>
Здесь я еще использую доп. поля пользователей (плагин xfields).
Как побороть в профиле пользователей строки типа:
{l_uprofile:status}
{l_uprofile:regdate}
{l_uprofile:last}
{l_uprofile:all_news}
{l_uprofile:all_comments}
{l_uprofile:new_pass}
{l_uprofile:pass_left}
И так далее?
это переменные плагина. Их всегда надо искать в файлах .ini, лежащих в директории lang.
В данном случае: плагин uprofile, путь /engine/plugins/uprofile/lang/russian/
там есть main.ini и users.ini
И еще на заметку: плагин uprofile поддерживает TWIG-шаблоны.
В них переменные выглядят иначе, вместо {l_uprofile:status} будет {{ lang.uprofile['status'] }}
Для отладки (чтобы понять, что и как хранится) в шаблоне можно добавить временный код:
{{ debugValue(lang.uprofile) }}
это покажет все доступные значения lang для плагина. Или например:
{{ debugValue(user) }}
это вся инфа о юзере.
Плагин xfields - не работает (или не предусмотрена?) проверка доп. полей пользователя при регистрации (при редактировании профиля работает). Т. е. удается зарегистрироваться, не заполнив доп. поле, указанное как "обязательное".
по идее примерно так:
1. удалить категорию руками
UPDATE ng_news SET catid ='' WHERE id = '1'
2. уменьшить счетчик новостей в категории
UPDATE ng_category SET posts = '0' WHERE id = '1'
Плагин suser - версия 0.4
+ реализован поиск пользователей по полю "Откуда", также это поле добавлено в таблицу сортировки
+ добавлена проверка состояния плагина xfields. Если плагин не включен - дополнительные поля не используются
% исправлен вывод информации для доп. полей, не заполненных пользователем
% отредактирована и дополнена документация
% отредактированы шаблоны
Также плагин выложен на github.
Замечания и пожелания приветствуются!
Настройка системы - вкладка "Домены" не помещается в строке вкладок и съезжает на вторую строку, хотя по идее должна помещаться.
Ответ на комментарий (через админку) - не сохраняется ответ, если содержит русские буквы - в поле answer попадает пустое значение (с английскими и цифрами - все ок).
плагин calendar - по-видимому, некорректно работает кэш: он включен, но hasPrevMonth и hasNextMonth стоят true, условия не работают.
То есть дело не только в проблеме шаблона.
Для проверки переписал плагин немного:
- закомментарил проверку значения $cacheExpire
- изменил условия генерации флагов
Получилось вот что:
/*
// If cache is activated - calculate MIN and MAX dates for news
if ($cacheExpire > 0) {
//
*/
$mmx = $mysql->record("select (select postdate from ".prefix."_news use key(news_postdate) where mainpage=1 order by postdate limit 1) as min, (select postdate from ".prefix."_news use key(news_postdate) where approve=1 order by postdate desc limit 1) as max", 1);
// Prev link
if ($mmx['min']<$dt) {
$tVars['prevMonth'] = array('link' => $prev_link);
$tVars['flags']['havePrevMonth'] = true;
} else {
// Lock
}
// Next link
if ($mmx['max']>=$nextdt) {
$tVars['nextMonth'] = array('link' => $next_link);
$tVars['flags']['haveNextMonth'] = true;
} else {
// Lock
}
/* } else {
$tVars['prevMonth'] = array('link' => $prev_link);
$tVars['nextMonth'] = array('link' => $next_link);
$tVars['flags']['havePrevMonth'] = true;
$tVars['flags']['haveNextMonth'] = true;
}
*/
В результате флаги генерируются нормально, в том числе если кэш выключен. Пример - у меня в блоге (см. подпись).
Редактирование шаблонов - HTTP error during request при попытке сохранить файл .tpl, содержащий JavaScript.
Проверялось мной на шаблонах плагинов switcher, calendar, uprofile (profile.tpl).
При добавлении скриптов из данных шаблонов в любой другой файл появляется та же ошибка и редактирование файла становится невозможным. Если убрать код скрипта - снова все ок.
Проверялось мной на двух разных хостингах, если что.
Меню категорий - замечание: при снятии галочки "Отображать в меню" для родительской категории дочерние все равно отображаются. Было бы неплохо автоматически прятать их тоже.
Вот еще полезная статья - ТВИГ для верстальщиков: http://twig.kron0s.com/a/02-twig-for-template-designers
Пара простых примеров от меня, использовал на своем сайте:
Вывод списка тегов в шаблоне news.short.tpl (а также news.full.tpl, news.search.tpl), разделенных запятыми. Тэги перебираются в цикле, внутри проверка условия - если кол-во тегов больше, чем текущий проход цикла, то ставим запятую, иначе - нет (чтобы не было запятой после последнего тега).
{% if p.tags.flags.haveTags %}
<p>
<b>теги:</b>
{% for tag in p.tags.list %}
<a href="{{ tag.link }}" title="Все новости с тегом "{{ tag.name }}"">{{ tag.name }}</a>{% if p.tags.count > loop.index %},{% endif %}
{% endfor %}
</p>
{% endif %}
Еще пример - вывод в шаблоне news.categories.tpl списка категорий с отдельным маркером для активной категории:
<ul class="list-unstyled">
{% for entry in entries %}
<!-- особый маркер для активной категории -->
{% if (entry.flags.active) %}
<li class="li-none">
<i class="glyphicon glyphicon-hand-right"></i>
{% else %}
<!-- для остальных категорий -->
<li class="li-circle">
{% endif %}
{{ entry.mark }}
<a href="{{ entry.link }}">
{{ entry.cat }}
</a>
</li>
{% endfor %}
</ul>
/engine/skins/default/tpl/templates.tpl - опечатка в 23 стр: cellaspacing (должно быть cellspacing).
<table width="100%" border="0" cellaspacing="0" cellpadding="0">
Плюс предлагаю две косметические правки:
1. после отключения кнопки Create template левый столбец таблицы выглядит некорректно (пустое место внизу). Решение - добавил цвет фона столбцу, стр. 26.
<td valign="top" style="background-color: #E0E0E0">
2. столбец с редактором немного выступает по ширине (в правой части таблицы). Решение - добавил внутренний отступ, стр. 32:
<td valign="top" style="padding-right: 6px">
тут скорее не переписывать, а фактически с нуля надо писать:
1. другая структура файлов и папок - в DLE, насколько я помню, модули более тесно интегрированы, чем в NG плагины.
2. другой шаблонизатор (в этом модуле, например, в файле friends.php куча кода с использованием echo).
Редактирование новости - два глюка с отображением:
1. если нажать на вкладку Комментарии, а после этого - перейти на вкладку Дополнительно, то правая панель на вкладке Дополнительно сильно съезжает влево (сжимается до размера 50% окна).
2. правая панель ездит вправо-влево при переключении между вкладками Основное содержание (Дополнительно) и Приложенные файлы. Но здесь съезжает не так заметно).
Наблюдается в фаерфоксе. В хроме почему-то все ок на последней сборке.
Довел до ума свое решение, предлагаю протестировать.
+ Подсветка кода в файлах .tpl, .css, .js, .ini
+ Работает полноэкранный режим.
Для включения необходимо:
1. Заменить файлы /lib/codemirror на приложенные
2. Заменить файл /engine/skins/default/tpl/templates.tpl на приложенный
Плагин xnews - в конфиге нужно поправить описание, явный копипаст из плагина top_news.
Плагин популярных новостей. Популярность определяется либо по количеству просмотров новости либо по количеству оставленных к ней коментариев.
Количество блоков с популярными новостями
Также плагины lastnews, top_news и favorites можно убрать из релиза, а в документации xnews вместо этой строки:
Функционально он заменяет плагины: lastnews, top_news
добавить текст:
Возможности плагина:
- вывод блока "последние новости"
- вывод блока "популярные новости"
- вывод блока новостей, добавленных в закладки
- и т. д.
Плагин simple_title - уже писали раньше, что в SVN-версии не работает, выдает ошибку Call to undefined function GetNewsTitle()
Можно его убрать из релиза, т. к. есть simple_title_pro.
1. шаблон news.table.tpl - не работают переменные {{ day }} {{ month }} {{ year }} и {{ dateStamp }} для режимов by.day, by.month и by.year
Функция debugValue возвращает NULL по всем переменным.
{% if (handler == 'by.year') %}
<p>Новости за месяц {{ year }} год</p>
{% endif %}
{% if (handler == 'by.month') %}
<p>Новости за месяц {{ month }} {{ year }}</p>
{% endif %}
{% if (handler == 'by.day') %}
<p>Новости за {{ day }} {{ month }} {{ year }}</p>
{% endif %}
2. Управление шаблонами - если с сайта удалить шаблон default, то при входе в Управление шаблонами все равно сверху будет строка: "Редактирование шаблона [default]" и путсой список файлов под ней. То есть, надо дополнительно переключаться на свой шаблон (нажать Выбрать).
Если же шаблон default в папке templates есть - по умолчанию выводит его список файлов слева, даже если шаблон на сайте задан другой. Опять же приходится нажимать "Выбрать".
Логичнее было бы, чтобы в левой панели сразу отображался действующий шаблон сайта вместо default.
Опечатка в конфиге двух плагинов: calendar и archive, текст следующий:
автоматически - при включении плагина автоматически генерируется блок {plugin_comments}
Явно копипаст, должно быть plugin_calendar и plugin_archive.
Еще два замечания:
1. плагин calendar - должен при включенном кэше не выдавать несуществующие даты и месяцы.
На практике: кэш включен, новости только за 24.01 - месяцы прокручиваются и вперед, и назад.
2. настройка даты публикации новости: "Установить указанные дату / время" - если задано смещение часового пояса, то оно автоматически вычисляется.
Пример: хотим указать время публикации 00:30, стоит смещение -120. В итоге новость попадает в предыдущий день с временем 22:30.
Это смещение дезориентирует (пока тестил календарь, запутался и не сразу понял, в чем дело). Тем более что при редактировании даты публикации о нем можно и забыть.
С подсветкой одновременно всех синтаксисов в одном файле не разобрался, сделал чуть проще.
var tmode;
if (ngFileName.indexOf(".tpl") > 0) {tmode = "text/html"};
if (ngFileName.indexOf(".css") > 0) {tmode = "text/css"};
if (ngFileName.indexOf(".js") > 0) {tmode = "javascript"};
var cm = CodeMirror.fromTextArea(
document.getElementById('fileEditorSelector'), {
lineNumbers: true,
mode: tmode,
// lineWrapping: true,
styleActiveLine: true,
tabMode: "indent",
extraKeys: {
"F11": function(cm) {cm.setOption("fullScreen", !cm.getOption("fullScreen"));},
"Esc": function(cm) {if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);}
}
В таком виде - посвечивает нормально css в файлах стилей, html в файлах шаблонов (включая проверку незакрытых тегов) и javascript в файлах .js.
Сжатый файл codemirror.js с нужными модулями прилагаю в архиве, сгенерил его в генераторе: http://codemirror.net/doc/compress.html
(добавил режимы htmlmixed, css, javacsript, xml - по идее htmlmixed зависит от этих трех)
Файл стилей там же (в нем изменил только размер шрифта).
upd. правда, с этим моим фиксом полноэкранный режим сломался но, думаю, смысл понятен.
в Управлении шаблонами кнопка "Create template" не работает (ничего не прроисходит при нажатии). Предлагаю ее заменить на "Create file", чтобы можно было прямо в редакторе создать файл .tpl