Илья Уткин

Илья Уткин

С нами с 15 декабря 2012; Место в рейтинге пользователей: #9
Илья Уткин
01 декабря 2015, 15:37
0
$productRes = $modx->getObject('modResource', $_GET['product']);
$product = $productRes->pagetitle;
$modx->setPlaceholder('product', $product); // Устанавливаем плейсхолдер с названием товара
$amount = $productRes->getTVValue('price');
$modx->setPlaceholder('amount', $amount); // Устанавливаем плейсхолдер с ценой

if (!$_POST['phone']) return;
$properties = $modx->resource->get('properties');
$orders = $properties['orders'];
if (!$orders) $orders = array();
$ordertId = count($orders) + 1;
$orders[$ordertId] = array(
        'num' => $ordertId,
        'amount' => $amount,
        'product' => $product,
        'phone' => $_POST['phone'],
        'paid' => 0
    );
$properties['orders'] = $orders;
$modx->resource->set('properties', $properties);
$modx->resource->save();
$form = $modx->getChunk('payForm', $orders[$ordertId]);
print $form;
die();


И в форме эти поля будут доступны в соответствующих плейсхолдерах:

[[!createOrder]]
<h2>Вы собираетесь приобрести [[+product]]. Стоимость составляет [[+amount]] руб.</h2>
<form action="" method="post">
<input name="phone" />
</form>
Илья Уткин
01 декабря 2015, 11:40
+1
А мне не перепадет, случайно, за autoRedirector? )) ilyautkin@mail.ru
Илья Уткин
29 ноября 2015, 13:02
+1
В MODX есть генератор псевдонимов. Если у вас настроена транслитерация, то можно использовать его. Нужно пробежаться по всем файлам и записям. Вот так можно транслитерировать любую строку:
<?php
$generator = $modx->newObject('modResource');
$string = 'строка кириллицей';
$string = $generator->cleanAlias($string);
print $string; // выведет "stroka-kirillizcey"
Илья Уткин
27 ноября 2015, 11:58
0
Я не знаю, как еще объяснить… Тут проще будет самому настроить. У вас есть возможность выделить бюджет 3000 руб.? Если да, то скидывайте в личку доступы, я посмотрю.
Илья Уткин
27 ноября 2015, 10:13
+2
<img src="[[+gravatar]]?s=100&d=[[++site_url]][[+photo:default=`[[++rb_base_dir]]img/nophoto.png`]]" />
А в каком смысле «параметры не обработаны»?
Илья Уткин
26 ноября 2015, 19:56
+2
Надо так:
<label>
  <input type="checkbox" name="extended[name][]" value="first">
  Первый
</label>
<label>
  <input type="checkbox" name="extended[name][]" value="second">
  Второй
</label>
<label>
  <input type="checkbox" name="extended[name][]" value="third">
  Третий
</label>

Тогда в name запишется массив.

Например, если выбрали первый и третий, то массив будет такой:
array('first','third');
Илья Уткин
26 ноября 2015, 18:49
1
+2
<img src="[[+gravatar]]?s=100&d=[[+photo:default=`[[++rb_base_dir]]img/nophoto.png`]]" />
Илья Уткин
25 ноября 2015, 21:13
0
Так вот же, в сниппете
$productRes = $modx->getObject('modResource', $_GET['product']);
$product = $productRes->pagetitle;
$amount = $productRes->getTVValue('price');
Илья Уткин
25 ноября 2015, 21:09
0
Нет, id страницы с формой
Илья Уткин
25 ноября 2015, 20:12
0
Вот в следующий раз всегда структуру тоже показывайте. Мы, программисты, хоть и обладаем экстрасенсорными способностями, но в меньшей степени, чем, например, Пахом…

Илья Уткин
25 ноября 2015, 20:02
+2
<?php
if (isset($input) && $input) {
    $resource = $modx->getObject('modResource', $input);
    if (!$resource) return '';
} else {
    $resource = $modx->resource;
}
$root = $modx->getObject('modResource', 1);
switch ($resource->parent) {
    // Перечисляем категории 1-этажных домов
    case 2:
        $output = $root->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
        break;
    // И двухэтажных и мансардных
    case 24:
    case 34:
        $output = $root->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
        break;
    default:
        $output = '';
        break;
}
return $output;
Илья Уткин
25 ноября 2015, 20:01
0
Примерно так сделана форма у меня на сайте https://ilyaut.ru/pay/, только приправлено немножечко AJAX'ом.
Илья Уткин
25 ноября 2015, 19:57
+1
1) Можно сделать кнопку «Заказать» ссылкой, в которую подставлять данные товара. Например, так:
<a href="[[~17]]?product=[[+id]]">Заказать</a>

2) На странице, куда ведет эта ссылка сделать форму для ввода пользователем своих данных с пустым параметром action (чтобы форма отправлялась на этот же адрес):
<form action="" method="post">
<input name="phone" />
</form>

3) На этой же странице (например, прямо перед формой) вызываем сниппет [[!createOrder]]:
if (!$_POST['phone']) return;
$properties = $modx->resource->get('properties');
$productRes = $modx->getObject('modResource', $_GET['product']);
$product = $productRes->pagetitle;
$amount = $productRes->getTVValue('price');
$orders = $properties['orders'];
if (!$orders) $orders = array();
$ordertId = count($orders) + 1;
$orders[$ordertId] = array(
        'num' => $ordertId,
        'amount' => $amount,
        'product' => $product,
        'phone' => $_POST['phone'],
        'paid' => 0
    );
$properties['orders'] = $orders;
$modx->resource->set('properties', $properties);
$modx->resource->save();
$form = $modx->getChunk('payForm', $orders[$ordertId]);
print $form;
die();

В чанке payForm должна быть форма. В ней будут доступны плейсхолдеры [[+num]] — номер заказа, [[+amount]] — сумма, ну и прочие.

4) После формы в чанке должен стоять какой-нибудь такой скриптик:
<script>document.forms[0].submit();</script>

Единственное, что надо дописать — это генерация подписи (поле wsb_signature). Это тоже надо делать в сниппете createOrder, а затем передать в чанк payForm
Илья Уткин
25 ноября 2015, 19:36
+1
Разверните-ка дерево ресурсов и укажите, у каких ресурсов указана цена, у каких указана площадь. Если я в этот раз правильно понял, то вот так должно работать:

<?php
if (isset($input) && $input) {
    $resource = $modx->getObject('modResource', $input);
    if (!$resource) return '';
} else {
    $resource = $modx->resource;
}
switch ($resource->parent) {
    // Перечисляем категории 1-этажных домов
    case 2:
        $output = $resource->Parent->getTVValue('price_etag_1') * $resource->getTVValue('plochad_obchaya');
        break;
    // И двухэтажных и мансардных
    case 24:
    case 34:
        $output = $resource->Parent->getTVValue('price_etag_2') * $resource->getTVValue('plochad_obchaya');
        break;
    default:
        $output = '';
        break;
}
return $output;
Илья Уткин
24 ноября 2015, 14:37
0
Ну тогда я не знаю… может, у сообщесва будут идеи…
Илья Уткин
24 ноября 2015, 14:24
0
Проверьте названия твшек
Илья Уткин
24 ноября 2015, 11:02
0
Может, [[+id:getPrice]]?
Илья Уткин
23 ноября 2015, 17:01
+1
[[*plochad:mpy=`[[*parent:eq=`17`:then=`[[*price_1]]`:else=`[[*price_2]]`]]`]]

Но лучше, конечно, написать сниппет [[*id:getPrice]]:
if (isset($input) && $input) {
  $resource = $modx->getObject('modResource', $input);
  if (!$resource) return '';
} else {
  $resource = $modx->resource;
}
switch ($resource->parent) {
  // Перечисляем категории 1-этажных домов
  case 17:
  case 22:
  case 38:
    $output = $resource->getTVValue('price_1') * $resource->getTVValue('plochad');
    break;
  // И двухэтажных
  case 24:
    $output = $resource->getTVValue('price_2') * $resource->getTVValue('plochad');
    break;
  default:
    $output = '';
    break;
}
return $output;
Илья Уткин
20 ноября 2015, 20:48
+2
MANAGER_URL, CONNECTORS_URL, BASE_URL должны включать в себя folder, например, /folder/manager/, а не просто /manager/
Илья Уткин
20 ноября 2015, 10:58
+1
А такой вариант пробовали?
{$_modx->resource->getTVValue('tv-name-of-name-of-other-name')}