Вы не зашли.
Если вдруг не все следят за SVN - появилась новая версия плагина:
[0.08][2013-06-02] [[ !! Только для SVN1157+ == Необходимо удалить и заново установить плагин !! ]]
+ БД плагина переведена на UTF8, для корректной работы необходимо удалить и заново установить плагин.
Теперь корректно поддерживаются национальные кодировки
Yuliko, вот с платежными системами, к сожалению, не выйдет.
Есть старые модули для работы с WebMoney, но даже их необходимо актуализировать. А уж под QIWI сейчас нет совсем ничего.
Так что пока на NG можно сделать обычный offline интернет-магазин, когда деньги передаются курьеру на месте.
Yuliko, если интернет-магазин небольшой (десятки-сотни товаров) и нет требований к оформлению доставки/созданию красивых писем-нотификаций/отслеживаний статусов доставки, то сделать можно и работать всё будет. Сейчас основная проблема - отсутствие реальной задачи. Делать "сферический магазин в вакууме" не очень получается.
Задача по созданию магазина решается связкой плагинов:
* xfields - задание полей типа "цена", "наличие" и так далее, включая понятие "таблица" (когда у одного товара могут быть разные цвета или разные размеры и посетитель может положить в корзину нужный ему вариант цвета/размера)
* basket - корзина заказа
* feedback - формирование заказа и отправка Email сообщения администраторам и посетителю
AI, что тут есть "главная" и "дочерняя".
Ты дал пример дерева категорий, но не сказал на каких страницах нужен блок xnews и в каких категориях/новостях с какими категориями находится посетитель.
irbees2008, без переделки механизма добавления новостей (и плагина nsm) - будет крайне сложно сделать загрузку файлов при создании новости.
А без дополнительного поля ,чтобы брал дату новости в которой стоит и сравнивал с текущей?
Алгоритм:
1. Открываешь /readme/docs/index.html
2. Смотришь шаблон news.short/news.full
3. Ищешь там описание TWIG переменных и находим ответ на свой вопрос
Ответ где-то рядом.
Если и это не поможет, то присмотрись к переменной news.dateStamp
AI, а вот на этот вопрос ты сможешь ответить сам
1. Открываешь Яndex и вводишь в строке поиска "twig"
2. Находишь ссылочку на страничку проекта (ссылка с заголовком "Homepage - Twig - The flexible, fast, and secure PHP template engine")
3. На странице TWIG'а выбираешь раздел "DOCUMENTATION" и читаешь-читаешь-читаешь
4. Чтобы немного сократить время поиска - загляни в конец страницы, блок "Functions"
p.s. Именно так я поступил, когда попробовал найти решение для твоей задачи.
Открыл документацию по TWIG'у и начал думать... но было бы неплохо, если бы остальные также старались поступать. Это полезно и мне (меньше времени тратить на тривиальные вопросы) и всем остальным (не надо ждать ответа, можно самим много чего сделать)
p.p.s. Точного ответа на твой вопрос я не знаю, но "скорее да, чем нет. смотри в доках"
Забыл сказать, дату нужно указывать в формате ГГГГ-ММ-ДД (к примеру, 2013-03-24).
И у движка и у NSM есть один существенный недостаток - невозможно загрузить файл до тех пор пока сама новость не создана.
Чтобы эту проблему решить - необходимо немного расширить понятие "черновик" и создавать черновики сразу же после нажатия на кнопку "добавить новость" (по аналогии с черновиками, создаваемыми в WEB интерфейсе gmail'а).
AI,.. я тут подумал - тебе же не обязательно удалять какой-то блок. Его достаточно просто перестать отображать. А с такой постановкой вопроса уже есть вариант.
Единственное ограничение - твой доп. блок можно будет показать либо перед новостью либо после.
Алгоритм таков:
1.1. Создаём доп. поле с ID "date" (не обязательно именно таким) тип "текстовый", в него будем записывать дату.
1.2. Создаём доп. поле с ID "info" тип "текстовый блок", в него будем записывать доп. информацию (если она меняется)
2. В шаблоне news.full.tpl (а при желании - и в news.short.tpl) добавляем строку:
[TWIG]
{% if (p.xfields.date.value != '') and (date(p.xfields.date.value) > date()) %}
Дата ещё не наступила, отображение доп. информации: {{ p.xfields.info.value }}
{% endif %}
[/TWIG]
nimiko, при редактировании новости info_hash заполнял?
legenda, сделать - реально. Но чуть позже, сначала надо с предыдущим плагином разобраться.
А checkboxы как-то можно реализовать?
Checkbox'ы скоро появятся в xfields и оттуда мигрируют в feedback. Скорее всего до релиза.
AI, офигеть, ну и задачка.
Скажи честно - ЗАЧЕМ такой изврат??
И где должен быть этот блок - являться частью новости или частью шаблона news.short/news.full?
Штатно - да, не сделать. Нужно писать плагинчик.
Yuliko, на экране показывается голый JavaScript?
Проверяй шаблон и JS сайта - видимо, где-то что-то подпорчено и браузер воспринимает JavaScript как текст.
1.после обновления MySQL ERROR [query]: lock tables ng_news_view write, ng_news write
(1044): Access denied for user 'user27908_irbees'@'localhost' to database 'user27908_irbees'
то появляется, то нету
2.в профиле не работает {icqimg}. И редактирование профиля так и не заработало не на денвере и не на хосте
1. Вопрос к хостеру - у тебя почему-то не оказалось прав на выполнение функии "lock tables".
Либо сам права исправлял, либо хостер что-то подрезал
2. Редактирование проверял - работает. А вот {icqimg} действительно убрал окончательно. При желании сохранить эту функцию - можно воспользоваться TWIG переменными. В любом случае, статус выводится через функционал самой ICQ (даётся ссылка на изображение).
vitaly, теперь, после http://trac.assembla.com/ngcms/changeset/1160 в админке все хорошо, но в коде страницы категории: & заменяется на & именно в description и keywords
Странно
Буду разбираться. Но у меня на локали пока не воспроизводится.
vitaly, тестировал % Исправлена ошибка - не работала функция "выводить блок если в нём нет новостей" при настройке
у меня как неработала так и не работает(( или надо обновится до версии выше 1127? я просто пока вижу там есть коегде траблы неохота обновлятся пока
Нет, обновлять сам двиг не требуется.
Но нужно зайти в настройки блоков (в админке плагина) и заново выставить значение этого флага. Ты это сделал?
http://trac.assembla.com/ngcms/changeset/1159
% Из .htaccess и инсталлятора убран allow_call_time_pass_referenceВ шаблоне инсталлера остались следы allow_call_time_pass_reference
Спасибо, исправил.
AI, уточни в каком именно шаблоне ты хочешь это сделать и какую задачу при этом решаешь.
RaSSveT, для отправки почты используется библиотека phpmailer (лежит в engine/includes/classes/phpmainer/).
Она, вроде, поддерживает работу с SSL.
При желании можешь пропатчить функцию отправки email сообщения sendEmailMessage(), которая находится в engine/includes/inc/functions.inc.php и реализовать необходимый функционал.
В админке - добавление категории, при заполнении поля - Описание, в котором содержится символ - & (амперсанд), преобразует его в & т.е. все нормально, но если взять и отредактировать эту категорию (можно тупо зайти и пересохранить), то - & дублируется, столько раз, сколько будет пересохраняться категория.
Спасибо, исправил.
legenda, эта ошибка от плагина tags, он пытается запустить механизм "автоподбона тегов по списку", но почему-то запрос не отрабатывает.
У тебя там какая версия двига?
[0.25][2013-01-18][Необходима версия SVN1123+]
+ Для шаблонов новостей (news.short.tpl, news.full.tpl) добавлены TWIG переменные с тегами
+ При добавлении/редактировании новостей добавлен suggest блок - автоподбор тегов по списку уже существующих тегов
А как добавить что-то, только к категориям второго уровня у которох есть дочерние, т.е.:
Извини за нескромный вопрос, а документацию читать не позволяет религия?
Обрати внимание на переменные entry.level и entry.flags.hasChildren.
Вот так должно работать:
{% if (entry.level == 1) and entry.flags.hasChildren %}Второй уровень с детьми{% endif %}
=======
vitaly, вопрос не по этой теме, но из той же оперы )) так понимаю, что и возможность в краткой и полной новости вывести ее родную категорию не главную, тоже не представляется возможным, да?
А вот этого в документации нет.
Но возможность в SVN версии есть.
Добавь в news.full.tpl:
[TWIG] {{ debugValue(news.categories) }}[/TWIG]
и всё станет ясно.
Вкратце:
news.categories.count - кол-во категорий в которой находится новость
news.categories.list - список категорий со всей значимой информацией по категории
2. насколько я понял, у нас теперь все скрипты выведены в папку /lib/ зачем тогда продолжать в шаблонах поддержку
<script type="text/javascript" src="{admin_url}/includes/js/functions.js"></script> <script type="text/javascript" src="{admin_url}/includes/js/ajax.js"></script> <script type="text/javascript" src="{admin_url}/includes/js/jquery-1.6.3.min.js"></script>
?
Ты прав.
В SVN1157 добавил переменную {scriptLibrary}, которая указывает на каталог /lib и обновил под неё базовый шаблон.
Есть предложение (куда постить? сюда или в багтреккер?), добавьте больше обработчиков (exec_acts), никогда не знаешь где и когда они пригодятся, а делать хаки не хочется.
На багтрекер - только явные ошибки, все обсуждения - на форум.
По поводу mysql'я я уже отписал, по всем остальным местам - старался в значимые места делать перехват через регистрацию класса-перехватчика, специально созданного для заданной функции.
Такие классы есть на редактировании/просмотре новостей, комментариев, управлении категориями и т.д. и т.п.
Если чего-то конкретного не хватает - пиши, будем думать.
legenda, плагин ublog даёт возможность на отдельной страничке посмотреть новости конкретного пользователя и всё.
Фактически это обычный поиск по автору, но со своим собственным шаблоном.
Mark,
1. Значит надо отдельно хранить имена таблиц по которым будет сбрасываться кеш при обновлении таблицы.
Или даже определять откуда пришел вызов и решать - нужно ли обновлять кеш. К примеру, обновление таблицы ng_news из админки - явный повод для сброса кеша.
А тоже самое обновление с сайта - очень похоже на обновление счетчика и тут спокойненько всё можно кешировать
2. Да, с такой точки зрения мысль интересная. Но у меня есть подозрение, что тут ещё будет играть скорость работы mysql и memcached. Если memcached работает на другом сервере с пингами в 10ms, а mysql локально - то явно mysql будет быстрее. Ну и наоборот.
3. Планируется переписать сам класс, т.к. самая полезная фишка mysqli - передача параметров в SQL запрос.
Будет писаться новый класс, который сохранит старые функции (для совместимости) и добавит новые (с использованием шаблонов).
И паралельно будут переписываться SQL запросы на более правильный режим работы.
Сложновато без документации на ощупь делать плагины. Может есть уже какой-то способ в плагине узнать права пользователя?
Документацией по мере возможности занимаюсь, но она действительно сильно отстаёт.
Да, возможность есть.
// Check if user $user have access to identity $identity with mode $mode
// $identity - array with element characteristics
// * plugin - id of plugin
// * item - id of item in plugin
// * ds - id of Date Source (if applicable)
// * ds_id - id of item from DS (if applicable)
// $user - user record or null if access is checked for current user
// $mode - access mode:
// 'view'
// 'details'
// 'modify'/
// .. here can be any other modes, but view/details/modify are most commonly used
// $way - way for content access
// 'rpc' - via rpc
// '' - default access via site
function checkPermission($identity, $user = null, $mode = '', $way = '') {}
Пример использования в админке:
if (!checkPermission(array('plugin' => '#admin', 'item' => 'system'), null, 'admpanel.view')) {
ngSYSLOG(array('plugin' => '#admin', 'item' => 'system'), array('action' => 'admpanel.view'), null, array(0, 'SECURITY.PERM'));
@header("Location: ".home);
exit;
}
Пример использования в плагине:
$permPlugin = checkPermission(array('plugin' => 'nsm', 'item' => ''), null, array(
'view',
'view.draft',
'view.unpublished',
'view.published',
'modify.draft',
'modify.unpublished',
'modify.published',
'delete.draft',
'delete.unpublished',
'delete.draft',
'list',
'add',
));
...
if (!is_array($userROW) || !$permPlugin['view']) {
msg(array("type" => "error", "text" => $lang['perm.denied']));
return;
}
Т.е. можно запрашивать по одному плагину (админка это тоже "плагин", только с идентификатором "#admin") на выбор - права на одно действие и на группу действий.
legenda, плагин для админов или для посетителей?