Вы не зашли.
За 1к рублей напишу плагин.
Решение из той темы универсально и работает на любом количестве полей:
{% if p.xfields._table.countRec > 0 %}
var count = 1;
var tblid = 0;
tblid = $("input[type='radio']:checked").attr('id');
if(typeof tblid == "undefined"){
alert('<red>Вы не выбрали параметры заказа!</red>');
return false;
}
rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':51,'id':tblid,'count':count});
return false;
{% else %}
rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':1,'id':{news-id},'count':1});
{% endif %}
infinity237 пишет:Соберите что ли в одной мессаге то что нужно фиксить...
эта тема еще актуальна про фиксы ?
да
Был плагин favorites
Сам же можешь посмотреть доступные флаги:
{{ debugValue(global.flags) }}
По теме, давно уже обсуждалось: http://ngcms.ru/forum/viewtopic.php?id=3663
Добрый день, можно ли "не руками" сменить категорию у ~ 200...250 новостей с категории none на категорию например news.
0. Сделать backup базы.
1. Найти ID категории, у которой altname news.
2. Выполнить запрос, например через phpmyadmin:
UPDATE ng_news SET `catid` = '1' where `catid` = '';
Где 1 - это ID категории (см. 1).
3. Админка -> "Управление базой данных" -> "Обновить счетчик новостей"
Как сделать чтобы определённый блок показывался только незалогиненым посетителям ?
На старом шаблонизаторе:
[is-logged][/is-logged] - содержимое блока выводится в случае, если страница показывается залогиненному посетителю
[isnt-logged][/isnt-logged] - содержимое блока выводится в случае, если страница показывается незалогиненному посетителю
На twige:
{% if (global.flags.isLogged) %}здесь блок для зареганных{% endif %}
{% if not (global.flags.isLogged) %}здесь блок для незареганных{% endif %}
Надо ставить и тестировать. Или нужны доступы.
А конкретика где?
1/
Предположим у нас есть каталог продукции, с различными параметрами не влияющими на стоимость (например размер или цвет).
Задача: сделать вывод этого параметра в корзину и в письмо feedback'a. Решение задачи, когда параметр влияет на стоимость представлено в другой теме.
1) Создаем в xfields дополнительное текстовое поле: Новости → табличные данные. Например, size (Размер модели).
2) Заполняем таблицу из одного столбца для каждого продукта. Если продукт не имеет такого показателя, оставляем незаполненным.
3) Редактируем basket/lib/librpc.php, для того чтобы плагин мог работать с таблицами без "ценового столбца".
Найти https://github.com/vponomarev/ngcms-plu … #L130-L139
Заменить на:
$xc = xf_configLoad();
$xfData = xf_decode($nrec['xfields']);
$xfTData = unserialize($rec['xfields']);
// Get price
if (pluginGetVariable('basket', 'ntable_price') && isset($xfTData[pluginGetVariable('basket', 'ntable_price')])) {
$price = $xfTData[pluginGetVariable('basket', 'ntable_price')];
} elseif (pluginGetVariable('basket', 'news_price') && isset($xfData[pluginGetVariable('basket', 'news_price')])) {
$price = $xfData[pluginGetVariable('basket', 'news_price')];
} else {
$price = 0;
}
4) Выводим в news.full.tpl элементы - radio переключатели выбора параметра:
{% if p.xfields._table.countRec > 0 %}
{% for xdata in p.xfields._table.data %}
<input id="{{ xdata.id }}" type="radio" name="size" value="{{ xdata.field_size }}">
<label for="{{ xdata.id }}">{{ xdata.field_size }}</label>
{% endfor %}
<hh>
{% endif %}
5) Выводим кнопку/ссылку "Добавить в корзину" (в news.full.tpl):
<a href="#" class="purchase">Добавить В корзину</a>
6) Пишем обработчик на JS + TWIG (в news.full.tpl):
Работает по принципу: если таблица размеров в новости заполнена, то заставить пользователя выбрать размер и добавить продукт в корзину. Если таблица не заполнена, то добавить продукт в корзину. TWIG конструкции можно переписать на JS/JQ, если в этом есть необходимость.
<script>
$(document).ready(function() {
$(".purchase").click(function(e){
{% if p.xfields._table.countRec > 0 %}
var count = 1;
var tblid = 0;
tblid = $("input[type='radio']:checked").attr('id');
if(typeof tblid == "undefined"){
alert('<red>Вы не выбрали размер!</red>');
return false;
}
rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':51,'id':tblid,'count':count});
return false;
{% else %}
rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':1,'id':{news-id},'count':1});
{% endif %}
e.preventDefault();
});
});
</script>
7) Вывести переменную в таблицу в шаблонах /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl
{{ entry.xfields.tdata.size }}
2/
Предположим у нас есть каталог продукции, с различными параметрами среди которых есть изображения.
Задача: сделать вывод изображения продукта в корзине, сделать возможным использовать ссылку на новость в письмах-заказах feedback'a.
0) Важно не забывать, что в шаблонах /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl, как и в любых других TWIG шаблонах работают функции debagValue() и debugContext(), которые позволяют вывеси все возможные для использования переменные. Например:
{{ debugValue(entries) }}
Однако, к некоторым данным из новости нет доступа из шаблонов /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl (например ссылка на новость или изображения новости).
1) Редактируем basket/basket.php, для того чтобы плагин мог доставать нужные данные из таблиц news и images.
Требуется найти функциях plugin_basket_list(), onShow($formID, $formStruct, $formData, &$tvars), onProcess($formID, $formStruct, $formData, $flagHTML, &$tvars):
$total += round($rec['price'] * $rec['count'], 2);
Ниже добавить:
$linked_ds = $rec['linked_ds'];
$linked_id = $rec['linked_id'];
// Check if linked item is available
switch ($linked_ds) {
case $DSlist['news']:
// Retrieve news record
$recf = $mysql->record("select * from ".prefix."_news where id = ".db_squote($linked_id));
if (!is_array($recf)) {
return array('status' => 0, 'errorCode' => 3, 'errorText' => 'Item [news] with ID ('.$linked_id.') is not found');
}
$rec_img = array();
$img_urls = array();
foreach ($mysql->select("select * from ".prefix."_images where (plugin = 'xfields') AND (linked_id = ".db_squote($linked_id).")") as $irec) {
$rec_img []= $irec;
}
foreach ($rec_img as $imgInfo) {
$img_urls[] = ($imgInfo['storage']?$config['attach_url']:$config['images_url']).'/'.$imgInfo['folder'].'/'.$imgInfo['name'];
}
$xc = xf_configLoad();
$xfData = xf_decode($recf['xfields']);
$rec['news'] = $recf;
$rec['images'] = $img_urls;
$rec['news_url'] = home.newsGenerateLink($recf);
case $DSlist['#xfields:tdata']:
// Retrieve XFields record
$recf = $mysql->record("select * from ".prefix."_xfields where id = ".db_squote($linked_id));
if (!is_array($recf)) {
return array('status' => 0, 'errorCode' => 4, 'errorText' => 'Item [tdata] with ID ('.$linked_id.') is not found');
}
// Retrieve joined record (assume that it can be only news
if ($recf['linked_ds'] != $DSlist['news']) {
return array('status' => 0, 'errorCode' => 5, 'errorText' => 'Sorry, only news related XFields tables are supported now');
}
$nrec = $mysql->record("select * from ".prefix."_news where id = ".db_squote($recf['linked_id']));
if (!is_array($nrec)) {
return array('status' => 0, 'errorCode' => 6, 'errorText' => 'Item found, but related [news] is lost');
}
$rec_img = array();
$img_urls = array();
foreach ($mysql->select("select * from ".prefix."_images where (plugin = 'xfields') AND (linked_id = ".db_squote($nrec['id']).")") as $irec) {
$rec_img []= $irec;
}
foreach ($rec_img as $imgInfo) {
$img_urls[] = ($imgInfo['storage']?$config['attach_url']:$config['images_url']).'/'.$imgInfo['folder'].'/'.$imgInfo['name'];
}
$xc = xf_configLoad();
$xfData = xf_decode($nrec['xfields']);
$xfTData = unserialize($recf['xfields']);
$rec['news'] = $nrec;
$rec['images'] = $img_urls;
$rec['news_url'] = home.newsGenerateLink($nrec);
}
+ добавить $DSlist в global.
Внимание, решение делает в наихудшем случае 2n запросов к БД на действие, где n - число продуктов в корзине, что может повысить нагрузку на БД при больших количествах заказов.
2) После этого в шаблонах /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl появится возможность доставать данные из массивов news и images.
Например вывод изображения:
{% for entry in entries %}
...
{{ entry.images[0] }}
...
{% endfor %}
Вывод ссылки на новость:
{% for entry in entries %}
...
{{ entry.news_url }}
...
{% endfor %}
Результат:
Если не разбираться в причинах, то самым простым видится обернуть элемент списка в ссылку тоже, по типу:
<a href="123"><li style="margin-right: 3px; width: 184px;"><img src="http://tdd.com.ua/templates/fightwear/br/2.png" alt=" "></li></a>
[0.08A][2015-08-04]
% Альтернативная версия, с использованием video-js
[0.25][2015-07-26]
% Добавлена поддержка мультиселект полей в новостях
Думаю нет.
Table 'fightwea_db.ng_balance_manager' doesn't exist
Дописывать плагин.
Соберите что ли в одной мессаге то что нужно фиксить...
Предложение:
Есть реальная возможность взять разработчика 10к рублей / 80 часов (примерно 2.5$ / час).
Кто готов взять часть долгосрочного финансирования на себя (начиная от 1000р в месяц), пишите.
".uprefix." - префикс таблицы в базе данных (указывается при установке).
По поводу пустых значений - это зависит от того какая используется регистрация.
SELECT mail FROM ".uprefix."_users
файлы были загружены именно сюда /uploads/images/default/ логично что через фтп или другим путем они б загружали в другое место
Далеко не логично. Обычно шеллы загружают туда куда, где администратор будет с меньшей вероятностью искать.
infinity237, я не совсем понял твой коммент, можеш еще раз, что именно не влеяет?
у меня 100% самая последняя версия.
Согласно вот этому изменению (почти 3 годичной давности):
https://www.assembla.com/code/ngcms/c14 … ommit/1076
https://github.com/vponomarev/ngcms-cor … 8e1aa7aa03
В админке можно прописывать любые расширения, но непосредственно при загрузке (любой, будь то загрузчик файлов/изображений или загрузчик аттачментов в новостях или загрузчик изображений xfields - все эти фичи используют upload.class.php), файлы с расширениями 'php', 'pht', 'phtml', 'php3', 'php4', 'php5' будут отбрасываться. Будет выводиться сообщение, по типу:
(301) Загрузка файлов данного типа/с данным расширением запрещена (libnews.php)
Двойные расширения не представляют никакой угрозы при правильно настроенном сервере.
Если все же файл .php каким-то образом попал в /uploads/images/default/, то я вижу этому следующие возможные объяснения:
1) В NG, в частности upload.class.php, всеже есть где-то дыра, но на данный момент её идентифицировать не представляется возможным.
2) Файл был загружен по FTP.
3) Файл был загружен через другой скрипт, непосредственно не использующий upload.class.php
0. Ссылка не работает.
1. Я не понимаю, в какой кодировке должен быть RSS поток? Как вы используете windows-1251 на украинских сайтах?
2. Как работает guid isPermaLink? Что в него нужно пихать?
3. Если в <category> должно быть одно название категории, то как поступать с режимом category/?category=vasia? В NG есть понятия главная категория и вторичные. На этих страницах должны присутствовать элементы только из главных или из главных и вторичных? Если из главных и вторичных, то что должно выводиться в <category> (если там должно быть название главной категории, то почему мы выводим в этом потоке?) Как к этому всему относится Яндекс?
4. Обновил плагин. Из основного:
- Выдача теперь в UTF-8.
- Должен заработать вывод title из коробки.
- Вывод названия одной категории в category
- Должны заработать фиды для отдельных категорий (требуется понять как их формировать и что выводить - см. 3.)
В последних версиях NG, эта опция не влияет на дописывание .php
.php должно блокироваться при любых вариантах, если у вас дописывается это значит что старая версия NG.