Максим Кузнецов

Максим Кузнецов

Был в сети 04 августа 2021, 21:51
Заказы принимаю
1) ваш пост не в том разделе

2) что-нибудь пишется в логах?

3) возможно, проблема с хостингом, в частности, с функцией mail() или sendmail()

4) страница обновляется после отправки?

5) все Name в input'aх должны хранить просто название поле отправки, без required:minLength=6 этого остатка.
Единственная специфика, если вызывается линк, не существующий в структуре, то отдается не 404-ошибка, а — Fatal error: Call to a member function get() on a non-object

Заменил строку:
$ctx = $resource->get('context_key');
На:
if (!empty($resource)) {
		$ctx = $resource->get('context_key');
	}
	else{
		//тут редирект на мою 404 страницу.
	}
Спасибо, это уже читал. Тут вопрос, скорее, в том, чтобы реализовать контекст без создания в нем «дефолтной страницы».

UPD: реализовал предложенным методом, все отлично, кроме одного нюанса:

Структура контекста (brends):
— Список брендов (псевдоним brends, id — 368)
— — бренд 1
— — 2
— — x

Настройки контекста (brends):
base_url: /brends/
site_url: адрес_сайта/brends/
site_start: 368

При заходе на внутренние страницы бренда (1, 2, 3) — все корректно работает, правда появляется ненужный фолдер в пути /brends/brends/название (именно из-за этого спрашивал по поводу реализации контекста без site_start).

Но, если я захожу по адресу /brends/brends/, то правилами .htaccess адрес становится вида /brends (откусывается "/" и, видимо, пропадает псевдоним главной страницы, в результате отдавая 404 ошибку).

.htaccess:
AddDefaultCharset utf-8
Options +FollowSymLinks
RewriteEngine On
RewriteBase /


#убираю дубль index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ /$1 [R=301,L]


#склейка www
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]


#откусываю слэш
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Подскажите, пожалуйста, как можно избавиться от этого эффекта?
Оу, большое спасибо! Даже не думал, что так легко можно их зассумонить.

Вот что вышло (вывожу минимальную цену товара из категорий, включая мультикатегории, имея список id товаров):
$pdo = $modx->getService('pdoFetch');
	$result = $pdo->getArray(
		'msProduct',
		array(
			'deleted' => false,
			'published' => true,
			'Data.price:>' => '0',
			'id:IN' => $ids,
		),
		array(
			'innerJoin' => array(
				'Data' => array('class' => 'msProductData')
			),
			'select' => array('Data' => 'price'),
			'sortby' => 'Data.price',
			'sortdir' => 'asc',
			'limit' => '1',
		)
	);
	if (!empty($result)) {
		if (substr($result['price'], -3, 3) == ".00") {
			$min = substr($result['price'],0,-3);
		}
		$modx->setPlaceholder('catalog.min',$min);
	}
Слегка обновил последнюю часть до:
$q = $modx->newQuery('msProduct');
	$q->innerJoin('msProductData', 'msProductData', '`msProductData`.`product_id` = `msProduct`.`id`');
	$q->where(array('msProduct.id:IN' => $ids, 'msProductData.price:>=' => "0"));
	$q->sortby('msProductData.price', 'DESC');
	$q->select('`msProductData`.`price`');
	$q->limit(1);
	if ($q->prepare() && $q->stmt->execute()) {
		$min = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
		if (!empty($min['price'])) {
			$modx->setPlaceholder('catalog.min',$min['price']);
		}
	}
— но все равно нет никакого результата и в логах пустота…
Мм… а если будет добавлено 2 товара за промежуток времени менее 5 секунд, не произойдет ли следующий сценарий:
— первый клик (картинка прячется), запускается таймер отчета вышеописанной функции и времени до скрытия jgrowl
— второй клик (на картинку опять навешивается display: none;), снова запускается 2 таймера
— первый таймер проходит и jgrowl становится видимым, но т.к. таймер jgrowl до скрытия увеличен, jgrowl еще отображается и резко проявляется юзеру.

?
Предположу, что где-то среди данных колбэков или в завязанных в этой области функциях:

,add: function() {
			var callbacks = miniShop2.Cart.callbacks;
			callbacks.add.response.success = function(response) {
				this.Cart.status(response.data);
			}
			miniShop2.send(miniShop2.sendData.formData, miniShop2.Cart.callbacks.add, miniShop2.Callbacks.Cart.add);
		}