Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#352 Re: "А как сделать..." » Alert корзины » 2015-08-23 22:45:08

Решение из той темы универсально и работает на любом количестве полей:

{% 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 %}

#353 Re: Тестирование версий » NGCMG версии 0.9.4 [Release Candidate 1][GIT 20150123] » 2015-08-21 11:45:52

vip пишет:
infinity237 пишет:

Соберите что ли в одной мессаге то что нужно фиксить...

эта тема еще актуальна про фиксы ?

да

#355 Re: Обсуждение шаблонной системы » Как сделать блоки используя Twig ? » 2015-08-14 13:24:59

Сам же можешь посмотреть доступные флаги:

{{ debugValue(global.flags) }}

По теме, давно уже обсуждалось: http://ngcms.ru/forum/viewtopic.php?id=3663

#356 Re: Вопросы функционирования системы в целом » публикация новостей. » 2015-08-12 00:57:51

newbi пишет:

Добрый день, можно ли "не руками" сменить категорию у ~ 200...250 новостей с категории none на категорию например news.

0. Сделать backup базы.
1. Найти ID категории, у которой altname news.
2. Выполнить запрос, например через phpmyadmin:

UPDATE ng_news SET `catid` = '1' where `catid` = '';

Где 1 - это ID категории (см. 1).
3. Админка -> "Управление базой данных" -> "Обновить счетчик новостей"

#357 Re: Обсуждение шаблонной системы » Как сделать блоки используя Twig ? » 2015-08-09 14:48:23

slor пишет:

Как сделать чтобы определённый блок показывался только незалогиненым посетителям ?

На старом шаблонизаторе:

[is-logged][/is-logged] - содержимое блока выводится в случае, если страница показывается залогиненному посетителю
[isnt-logged][/isnt-logged] - содержимое блока выводится в случае, если страница показывается незалогиненному посетителю

На twige:

{% if  (global.flags.isLogged) %}здесь блок для зареганных{% endif %}
{% if  not (global.flags.isLogged) %}здесь блок для незареганных{% endif %}

#360 Re: FAQ » Наглядный пример по запуску магазина на NG » 2015-08-05 04:23:07

1/
Предположим у нас есть каталог продукции, с различными параметрами не влияющими на стоимость (например размер или цвет).
Задача: сделать вывод этого параметра в корзину и в письмо feedback'a. Решение задачи, когда параметр влияет на стоимость представлено в другой теме.

1) Создаем в xfields дополнительное текстовое поле: Новости → табличные данные. Например, size (Размер модели).
rl5J9.jpg
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 %}

Результат:
2vXfR.jpg

#361 Re: Флейм » Кто подскажет ? » 2015-08-04 17:54:22

Если не разбираться в причинах, то самым простым видится обернуть элемент списка в ссылку тоже, по типу:

<a href="123"><li style="margin-right: 3px; width: 184px;"><img src="http://tdd.com.ua/templates/fightwear/br/2.png" alt=" "></li></a>

#362 Re: Страницы плагинов » bb_media :: Проигрыватель медиа-файлов » 2015-08-04 17:45:52

[0.08A][2015-08-04]
% Альтернативная версия, с использованием video-js

#364 Re: Запросы плагинов » xfields :: Дополнительные поля » 2015-07-26 23:45:20

[0.25][2015-07-26]
% Добавлена поддержка мультиселект полей в новостях

#368 Re: Тестирование версий » NGCMG версии 0.9.4 [Release Candidate 1][GIT 20150123] » 2015-07-17 15:11:34

infinity237 пишет:

Соберите что ли в одной мессаге то что нужно фиксить...

#369 Re: Флейм » Открыетое письмо сообществу NGCMS » 2015-07-17 14:08:16

Предложение:
Есть реальная возможность взять разработчика 10к рублей / 80 часов (примерно 2.5$ / час).
Кто готов взять часть долгосрочного финансирования на себя (начиная от 1000р в месяц), пишите.

#370 Re: "У меня не работает..." » Как вывести список всех email из базы ? » 2015-07-16 13:15:55

".uprefix." - префикс таблицы в базе данных (указывается при установке).
По поводу пустых значений - это зависит от того какая используется регистрация.

#372 Re: "А как сделать..." » Нашли дыру! Помогите!!!!!!!! » 2015-07-13 22:10:38

legenda пишет:

файлы были загружены именно сюда /uploads/images/default/ логично что через фтп или другим путем они б загружали в другое место

Далеко не логично. Обычно шеллы загружают туда куда, где администратор будет с меньшей вероятностью искать.

#373 Re: "А как сделать..." » Нашли дыру! Помогите!!!!!!!! » 2015-07-11 15:56:40

legenda пишет:

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

#374 Re: Страницы плагинов » rss_yandex :: Экспорт потока новостей в формате Яndex » 2015-07-09 12:34:04

0. Ссылка не работает.
1. Я не понимаю, в какой кодировке должен быть RSS поток? Как вы используете windows-1251 на украинских сайтах?
2. Как работает guid isPermaLink? Что в него нужно пихать?
3. Если в <category> должно быть одно название категории, то как поступать с режимом category/?category=vasia? В NG есть понятия главная категория и вторичные. На этих страницах должны присутствовать элементы только из главных или из главных и вторичных? Если из главных и вторичных, то что должно выводиться в <category> (если там должно быть название главной категории, то почему мы выводим в этом потоке?) Как к этому всему относится Яндекс?
4. Обновил плагин. Из основного:
- Выдача теперь в UTF-8.
- Должен заработать вывод title из коробки.
- Вывод названия одной категории в category
- Должны заработать фиды для отдельных категорий (требуется понять как их формировать и что выводить - см. 3.)

#375 Re: "А как сделать..." » Нашли дыру! Помогите!!!!!!!! » 2015-07-08 18:18:42

В последних версиях NG, эта опция не влияет на дописывание .php
.php должно блокироваться при любых вариантах, если у вас дописывается это значит что старая версия NG.

Подвал раздела

Работает на FluxBB