Автор Тема: Задаем курс, вписываем сумму, получаем цену  (Прочитано 24745 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #15 : 10 Сентябрь 2012, 15:01:14 »
Ну вот и очередной камень на моем пути=) На страницах все выводится правильно, как уже говорил выше, а вот когда человек добавляет товар в карзину, туда передается значение тв [*price*] которым является значение в долларах, а не результат работы плагина который переводит цену в гривну=( Перерыл форум шопкипера, ничего не могу найти по этому поводу и вряд ли мне там кто-то поможет, не очень там любят отвечать аматорам

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #16 : 10 Сентябрь 2012, 16:02:31 »
Цитировать (выделенное)
3) вызов [*price:kurs*]
Вроде работает, единственное что плохо, это то что курс вбивать в коде, а не допустим в отдельном тв, хотя по моему это не трудно изменить=).

Этот плагин вам ничего не дает. С таким же успехом Вы можете сделать любой свой простецкий плагин или сниппет, и хранить курс в коде (скрипте) этого плагина или сниппета. Ведь скрипты сниппетов и плагинов хранятся нигде иначе, как в соответствующих системных таблицах БД MODx.

Вам-то ведь нужно совсем другое.

Пункт 1. Надежно хранить, легко вводить и легко изменять текущий курс в админке через поле формы (либо своей либо стандартной).

Пункт 2. Легко получать этот курс из места, где он хранится, в скрипт своего плагина или сниппета, чтобы использовать его в вычислениях и выводить на страницах сайта.

Пункт 1 - я Вам расписал как это сделать стандартными средствами MODx - через TV пустого шаблона для одиночного пустого документа (нерационально, но приемлемо). Нерационально потому, что для хранения единственного значения этого курса таким способом у Вас уйдет более 40 полей нескольких системных таблиц (поля таблицы контента документа и поля таблиц TV). Приемлемо потому, что один лишний пустой документ с TV - это мелочь для сайта на MODx. Зато через это поле стандартной системной формы для TV в админке Вы легко сможете изменять значение этого вашего курса.

Пункт 2 - поскольку ваш курс хранится в поле TV, то это значение TV везде и всюду легко доступно - в любом скрипте любого сниппета или плагина, через

$curs = $modx->documentObject['tvname'][1]; //для единственного документа

Где tvname - имя вашего TV.

Значит, получили свой $curs из TV в скрипте любого сниппета/плагина, и вычисляйте с ним что угодно и через print или echo выводите результаты вычислений куда угодно. Можете еще плейсходлер создать, если в несколько мест на странице надо выводить.

Все просто и бетонно работает, нет никаких проблем и не надо заморачиваться с чужими плагинами/сниппетами, которые ничего полезного не делают и кроме ненужных заморочек ничего не дают.
« Последнее редактирование: 10 Сентябрь 2012, 16:06:31 от sadex13 »
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #17 : 10 Сентябрь 2012, 16:29:38 »
Цитировать (выделенное)
Я бы все же по отсутствию знаний, хотел бы воспользоваться первым способом. Создать шаблон, тв, вписать курс все понятно. Ну что мне делать дальше, как мне провести математическое действие с ценой и курсом? можно пожалуйста пошаговую инструкцию по типу
1)создаем сниппет.
2) В код сниппета вписывае -(<?php сам код ?>), называем - KURS
2) в шаблоне, там где нужен вывод цены пишем - [[+RURS+]].
Ну то есть подробный мануал для таких как я=))

В общем плане

$curs = $modx->documentObject['tvname'][1]; // получаем значение курса из TV
..... // что-то в зависимости от вашего товара и прочего
$price = цена * $curs;
print_r($price);

А конкретно - вам надо что-то типа ТЗ составлять, наугад скрипт написать невозможно.


FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #18 : 10 Сентябрь 2012, 16:34:26 »

Пункт 1 - я Вам расписал как это сделать стандартными средствами MODx - через TV пустого шаблона для одиночного пустого документа (нерационально, но приемлемо). Нерационально потому, что для хранения единственного значения этого курса таким способом у Вас уйдет более 40 полей нескольких системных таблиц (поля таблицы контента документа и поля таблиц TV). Приемлемо потому, что один лишний пустой документ с TV - это мелочь для сайта на MODx. Зато через это поле стандартной системной формы для TV в админке Вы легко сможете изменять значение этого вашего курса.

Пункт 2 - поскольку ваш курс хранится в поле TV, то это значение TV везде и всюду легко доступно - в любом скрипте любого сниппета или плагина, через

$curs = $modx->documentObject['tvname'][1]; //для единственного документа

Где tvname - имя вашего TV.

Значит, получили свой $curs из TV в скрипте любого сниппета/плагина, и вычисляйте с ним что угодно и через print или echo выводите результаты вычислений куда угодно. Можете еще плейсходлер создать, если в несколько мест на странице надо выводить.

Все просто и бетонно работает, нет никаких проблем и не надо заморачиваться с чужими плагинами/сниппетами, которые ничего полезного не делают и кроме ненужных заморочек ничего не дают.
В принципе так все вроде понятно, и я думаю что сделаю так вот как Вы описали, дело в том, что теперь моя главная проблема передать вот это вот значение в корзину shopkeeper'a. В чем сложность собственно, в корзину попадает значение ТВ параметра который определяется, по ID, в настройках шопкипера и по имени в коде вызова карзины в парамтре &priceTV=`price`
[!Shopkeeper? &cartTpl=`cartTpl` &priceTV=`price` &orderFormPage=`477` &hideOn=`477`  &currency=`грн.` &noJQuery=`1`!]
Тв парметр price это цена товара в долларе. Что выходит, что какие бы пересчеты не делались и не выводились в результате, шопкипер возьмет значение переменной price которое заданно в теле ресурса в параметре price, а вот как заставить его брать значение то которое получается в итоге?

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #19 : 10 Сентябрь 2012, 16:45:17 »
У меня есть идея, в принципе как такое можно реализовать, но опять же не хватает знаний. Отталкиваемый от самого конца, раз Shopkeeper берет значение из указанного нами тв параметра, значит результат вычисления нада передавать в этот параметр, а как сделать это опять же не понимаю.
Допустим так:
1) Созданем параметр ТВ с именем dollar, в этот тв вписывается наша цена в валюте.
2) Создаем пустой шаблон, к нему еще один тв с именем kurs. пишем наш курс туда.
3) Проводим вычисление и присваиваем значение (как присвоить не знаю) тв параметру с именем price, который в свою очередь подбирает шопкипер и отправляет в корзину.
Вопрос в том можно ли через переменную задать значение тв параметру, если можно то как?
« Последнее редактирование: 10 Сентябрь 2012, 16:49:51 от Dolce »

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #20 : 10 Сентябрь 2012, 17:51:53 »
Не так, а так как я раньше расписал

1. Создаём шаблон с пустым содержимым (не blank а именно обычный шаблон без содержимого).

2. Назначаем этому шаблону необходимые TV с соответствующим типом.

В вашем случае это будут два TV - dollar и kurs, тип TV - числовой.

3. Создаём документ на базе данного шаблона. Заполняем TV.

Здесь Вы заполните свои TV вашими значениями.

Дальше, делаете сниппет в котором

//передаем значения TV переменным
$dollar1 = $modx->documentObject['dollar'][1];
$kurs1 = $modx->documentObject['kurs'][1];

//вычисляем цену и присваиваем ее глобальной переменной
global $price1 = $dollar1 * $kurs1;

Дальше можете вызывать ваш сниппет шопкипер
[!Shopkeeper? &cartTpl=`cartTpl` &priceTV=$price1  &orderFormPage=`477` &hideOn=`477`  &currency=`грн.` &noJQuery=`1`!]

В параменте вызова шопкиппера priceTV будет результат, который вы до этого вычислили.
« Последнее редактирование: 10 Сентябрь 2012, 17:58:43 от sadex13 »
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #21 : 10 Сентябрь 2012, 18:47:40 »
Были у меня сомнения в том что не получится так, Или так нельзя или что-то не правильно :04:. Что я делал пошагаво.
1) Переименовал свой тв параметр price в тв параметр dollar. Сделал это за тем что бы цены были уже вбиты у всех позиций и не утерялись в случае неудачи. В общем создан параметр тв dollar который равен цене позиции в долларе.
2)Создается Ресурс - Курс доллара, к нем крепится новый тв параметр с названием kurs. Захожу в ресурс "Курс доллара", задаю курс.
3) Управление элементами->Сниппеты->Новый сниппет.
Название (из головы) -  OutPrice
Код:
<?php
//передаем значения TV переменным
$dollar1 = $modx->documentObject['dollar'][1];
$kurs1 = $modx->documentObject['kurs'][1];

//вычисляем цену и присваиваем ее глобальной переменной
global $price1 = $dollar1 * $kurs1;
?>
4) Создаю новый тв параметр в котором должна хранится вычисленная цена с названием price1 (global $price1 = $dollar1 * $kurs1;) Это нужно для того что бы указать в шопкипере какой именно тв применяется в качестве цены товара, по его ID. Указываю.
5) Иду в шаблон и пишу
<div class="price">Цена:[+price1+]</div>
.
Но ничего не работает.

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #22 : 10 Сентябрь 2012, 20:24:04 »
Тогда давайте по порядку. Сначала такое, после строки кода

//вычисляем цену и присваиваем ее глобальной переменной
global $price1 = $dollar1 * $kurs1;
echo $price1;

вставим echo,  посмотрим что выведет и двинемся дальше.

PS
Код: [Выделить]
<div class="price">Цена:[+price1+]</div>

Это не будет работать, Вы поставили вывод плейсхолдера, которого еще нет.

Чтобы его создать надо сделать так (сразу после вычислений):
$modx->setPlaceholder('price1p', $price1);
 И соответственно
<div class="price">Цена:[+price1p+]</div>

Т.е. имя плейсхолдера смените с price1 на price1p - нехорошо, если имя переменной и плейсхолдера совпадают в этом коде.
« Последнее редактирование: 10 Сентябрь 2012, 20:33:06 от sadex13 »
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #23 : 11 Сентябрь 2012, 13:39:07 »
Короче все напутано уже так что я уже и не знаю что делать. Мне уже все равно какой способ будет для работы с курсом. Можно сделать так, вот чисто теоретически:
Есть один тв параметр, назовем его dollar(задается на каждой странице товара)
Есть второй тв параметр, назовем его kurs(в пустом шаблоне, на одном ресурсе задается его значение)
Есть третий тв параметр, назовем его cena(а вот этот тв пустой но закреплен к каждой странице как и тв dollar)
Далее создается какая-то формула где-нибудь, не знаю где. потому что уже запутался дальше некуда, которая будет перемножать dollar на kurs для каждого товара и выводить цену в параметр cena, это самое главное, объясню почему, финальная цена обязательно должна быть присвоена какому-нибудь тв, потому что принцып работы шопкипера заключается в том что значение цены он берет из указанного в его настройках тв параметра. У меня уже руки падают=(

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #24 : 11 Сентябрь 2012, 15:09:24 »
Цитировать (выделенное)
принцып работы шопкипера заключается в том что значение цены он берет из указанного в его настройках тв параметра.

Начните с того, что программным путем, из любого тестового модуля (на этом форуме я расписал как создать простейший тестовый модуль), впишите в TV, к которому привязан ваш шопкипер, что-нибудь, и посмотрите как шопкипер сожрет это. После этого можно будет разбирать остальное. Уж эту-то задачку Вы должны осилить...
« Последнее редактирование: 11 Сентябрь 2012, 15:10:56 от sadex13 »
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #25 : 11 Сентябрь 2012, 16:28:28 »
Здесь все что нужно для этого
http://it-folio.ru/forum/index.php?topic=145.0
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #26 : 11 Сентябрь 2012, 16:55:43 »
Пробуем так, в тестовом модуле

$modx->documentObject['tvname'][1] = 666;
$price6 = $modx->documentObject['tvname'][1];
print_r($price6);

tvname - имя вашего TV, к которому привязан шопкипер.
[1] ни в коем случае не убирайте, именно в этом ключе ассоциированного массива содержится значение TV.
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #27 : 12 Сентябрь 2012, 11:11:56 »
Так, ладно, давайте по мере. Есть ресурс(позиция)
в нем есть ТВ dollar(цена в долларе)
Как мы уже говорили, есть отдельный ресурс, с пустым шаблоном и тв параметром kurs равным 8(для примера)
Сниппет для проверки вызова переменных. Имя сниппета outPrice.
<?php
$dollar=$modx->documentObject['dollar'][1];
echo $dollar;
?>
Вызов сниппета в чанке, для проверки:
<div class="price">Цена:[[OutPrice]]</div>
Выводит цену в долларе, как и нада при таком коде.
А как получить в теле сниппета ТВ параметр kurs, который задан в другом документе, конструкция:
$kursr=$modx->documentObject['kurs'][1];
Неработает. То есть в сниппете не выходит перемножить две переменных, потому что вызов второй не происходит

Оффлайн Dolce

  • Создатель
  • ***
  • Сообщений: 130
    • Просмотр профиля
  • Версия modx: EVO | REVO
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #28 : 12 Сентябрь 2012, 11:16:45 »
Пробуем так, в тестовом модуле

$modx->documentObject['tvname'][1] = 666;
$price6 = $modx->documentObject['tvname'][1];
print_r($price6);

tvname - имя вашего TV, к которому привязан шопкипер.
[1] ни в коем случае не убирайте, именно в этом ключе ассоциированного массива содержится значение TV.
Результатом работы этого модуля является вывод числа 666. Это о чем-то может сказать?

Оффлайн sadex13

  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Re: Задаем курс, вписываем сумму, получаем цену
« Ответ #29 : 12 Сентябрь 2012, 14:12:45 »
Это может сказать о том, что TV к которому привязан ваш шопкипер, нормально доступен в скрипте любого плагина/сниппета. Мы в писали в этот TV свое значение и вывели его на страницу сайта.

Другие TV, которые Вы создаете для хранения цены и пр., и для  вычислений, должны быть доступны аналогичным образом. Получайте их значение в скрипте своего сниппета/плагина, делайте вычисления и результат выводите в TV шопкипера. Все должно работать.
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.