Klike

Klike

С нами с 14 января 2015; Место в рейтинге пользователей: #48

Покупка товара в один клик

Привет всем. На сайте всего несколько товаров и хочется реализовать покупку в один клик без корзины.
То есть человек нажал на кнопку купить и сразу перешёл в платёжную систему.

Возможно это реализовать через Minishop2 или разумнее написать свой сниппет.
Подскажите разумный подход в решении этой задачи.
Павел
14 июня 2015, 20:44
modx.pro
8
4 572
0

Три языка на сайте

Добрый день!

У Василия есть замечательное решение переключения контекстов мультиязычного сайта.
И есть сниппет для вывода ссылок на переключение:

<?php
$tplRu = '<a href="[[+link]]">ru</a>';
$tplEn = '<a href="[[+link]]">en</a>';
$tplRuActive = '<span>ru</span>';
$tplEnActive = '<span>en</span>';

$output = '';
if ($modx->context->key == 'web') {
	$output .= $tplRuActive . ' | ' . $tplEn;
	$link = 'en/';
	if ($modx->getOption('site_start') != $modx->resource->id && $modx->getCount('modResource', array('uri' => $modx->resource->uri, 'context_key' => 'en'))) {
		$link .= $modx->resource->uri;
	}
}
else {
	$output .= $tplRu . ' | ' . $tplEnActive;
	$link = '/';
	if ($modx->getOption('site_start') != $modx->resource->id && $modx->getCount('modResource', array('uri' => $modx->resource->uri, 'context_key' => 'web'))) {
		$link .= $modx->resource->uri;
	}
}

return str_replace('[[+link]]', $link, $output);
Но вот как реализовать переключение ТРЁХ контекстов – никак не додумаю) Слабоват в PHP.
Подскажите, пожалуйста?
Klike
04 июня 2015, 08:51
modx.pro
1
1 144
+1

Очистка карточки товара от старых фото

Добрый день!
Давно стоит вопрос массовой чистки старых фото товаров на сайте. Можно вручную, но свыше 3000 товаров… времени уйдёт немерено)
Настроена синхронизация с 1С, через компонент mSklad (mSync), в 1С где нет фото стоит заглушка. И при синхронизации все заглушки закидываются в карточку товара.

Вопрос: как можно массово удалить все заглушки в товарах? В идеале – запретить синхронизировать их, но этот вопрос больше к разработчикам дополнения, в поддержке просто говорят, что такого функционала нет.

Схема думаю простая, пробежаться по всем товарам, сравнить картинки с исходной, если совпадает – удалить. НО как это реализовать… может кто подскажет?)
Klike
30 мая 2015, 12:29
modx.pro
1
1 227
0

Простой вывод погоды на сайте

Спасибо Ивану за помощь в написании сниппета
Klike
26 мая 2015, 07:06
modx.pro
8
4 315
+3

Фильтрация в mFilter2

Добрый вечер!
Возникла проблема такого характера: есть каталог с фильтрацией с помощью mFilter2. Одна группа фильтров почему-то перебивает остальные. Если выбран один фильтр из этой группы, то выборка остальных никак не влияет на результат — страница перезагружается, а результаты не меняются. В чем может быть проблема?
Спасибо!

UPD:
Спасибо за отклики, но проблему удалось решить самостоятельно.
Естественно опишу ее решение здесь.

У меня в ресурсах находилась таблица MIGX из 7 строк, где каждая строка это определенный тип товара со своими характеристиками (название типа было первым элементом каждой строки). Фильтрация ресурсов необходима была по типам товаров. Опираясь на данный вариант bezumkin.ru/modx/minishop2/msearch2/1805/ мной был написан свой класс фильтрации для таблицы:

<?php
class myCustomFilter extends mse2FiltersHandler {
    public function buildTypeWFilter(array $values, $name = '') {
        if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
            return array();
        }
        $results = array();
        foreach ($values as $value => $ids) {
            $items = json_decode($value, true);
            foreach($items as $key => $value2){
                $results[$value2['type']] = array(
                    'title' => $value2['type'],
                    'value' => $value2['type'],
                    'type' => 'typeW',
                    'resources' => $ids
                );
            }
        }
        ksort($results);
        return $results;
    }

    public function filterTypeW(array $requested, array $values, array $ids) {
        $matched = array();
        foreach ($requested as $value) {
            foreach ($values as $vkey => $val){
                $fil = json_decode($vkey, true);
                foreach ($fil as $t) {
                    if (trim($t['type']) === trim($value)) {
                        $matched[] = $val[0];
                    }
                }
            }
        }
        return $matched;
    }
}
Фильтрация работала, но при этом если выбран элемент из моего фильтра, то выбор в других группах фильтров никак не влиял на результат.
Дело оказалось в одной переменной, которая была пропущена по неопытности — $ids. Она содержала в себе ресурсы, выборка которых происходит по другим фильтрам. Соответственно мне надо было находить пересечение массива $ids с результатом работы моего фильтра. Иначе у меня выводился результат работы только моего фильтра, без учета предыдущих:

return array_intersect($matched, $ids);
Если это кому-то помогло — я рад)
Всем спасибо!
Александр
22 мая 2015, 17:30
modx.pro
1
1 385
0

Удаление дубликатов/старых изображений товара

Добрый день!
На сайте настроена синхронизация с 1С УТ, если в 1С обновлены изображения товара, после синхронизации оба изображения (старое и новое) остаются в карточке.
Также в 1С есть картинка-заглушка, если нет фото товара. И после синхронизации на хостинге куча картинок-заглушек.

Два вопроса:
  1. Можно ли как-то удалять старое(все изображения) при синхронизации товара?
  2. Как сравнить хэш картинки-заглушки и не синхронизировать её, либо удалять. Чтобы подставлялась заглушка по умолчанию, как, к примеру, изначально подставляется логотип miniShop2.
Подскажите, пожалуйста, куда копать?

p.s. Всех с наступающим 9 мая!
Klike
08 мая 2015, 07:29
modx.pro
1
1 533
0

Разные цифры в пункте ПРОСМОТРЫ

На сайте есть блок с популярными статьями. Сортировка самая примитивная(топ популярных статей):

[[!getTickets?
        &leftJoin=`{
        		"View": {
        			"class": "TicketView",
        			"on": "Ticket.id = View.parent"
        		}
        	}`
        &select=`{
        		"Ticket": "*",
        		"View": "COUNT(View.parent) as views"
        	}`
        &groupby=`Ticket.id`
        &sortby=`views`
        &tpl=`tpl.Tickets.popular`
        &limit=`4`
        &parents=`14`
    ]]
В разных браузерах разные цифры показывает.
В одном – 20, 28, 30, 8.
В другом – 20, 14, 10, 4.

Странная математика) В чём может быть дело?
Klike
29 апреля 2015, 11:56
modx.pro
1
839
0

[Решено] Изменить вид ссылки

Добрый день!

Есть блог на Tickets, где один раздел и все статьи, соответственно, в нём.
У каждой статьи есть TV категории и Теги. То есть одна статья может быть в нескольких категориях.

Вывод статей конкретной категории реализован с помощью фильтра по TV и pdoPage по такому принципу:
site.ru/blog?category=значение

Можно ли сделать вывод категорий такого вида: site.ru/blog/category/значение?

Подозреваю, что можно реализовать, используя дополнение VirtualPage, но не совсем понимаю, как оно работает.
Klike
28 апреля 2015, 06:10
modx.pro
2
1 081
0

[mSklad] Удаление старых фото при синхронизации

Добрый день!
Искал решение, но не нашёл. Быть может плохо искал.

На сайте используется одно фото товара. Настроена синхронизация с 1С с помощью компонента mSklad.
При каждой синхронизации фото товаров добавляются в ресурс. Хотелось бы сделать так, чтобы старые удалялись, то есть заменялись новыми, если таковые есть.

Может кто-то уже сталкивался с данным моментом?

p.s. И ещё, в 1С у товаров, в которых нет фото, стоит заглушка. Можно ли как-то не синхронизировать её?)
Klike
20 апреля 2015, 12:15
modx.pro
1
925
0

xPDO vs pdoFetch

Решил затестить чистый xPDO на скорость и противопоставить ему pdoFetch.

Ничего не имею против первого или второго. Напротив. Второе использую в работе регулярно. Однако, как я понял, изучение и применение чистого xPDO в своих разработках серьёзно поможет снизить нагрузку на сервер, ведь верно?

P.S.: Тестировалось на ахеренно быстром хостинге для MODX REVO — modhost.pro.

pdoFetch:

<?
$pdoFetch = $modx->getService('pdoFetch');
$setConfigArray = array(
		'return'	=> 'data',
		'parent'	=> '0',
		'limit'		=> '2000',
		'select'	=> 'id,pagetitle,uri,content',
	);
$pdoFetch->setConfig($setConfigArray);
$resources = $pdoFetch->run();
for($i=0; $i<count($resources); $i++)
{
	print $resources[$i]['pagetitle'];
}
print '<pre>'; print_r($pdo->getTime()); print '</pre>';

Результаты:

1ый запуск:
0.0118151: Total time
12 058 624: Memory usage

2ой запуск:
0.0111890: Total time
12 058 624: Memory usage

xPDO:

<?
$pdo = $modx->getService('pdoTools');
$q = $modx->newQuery('modResource');
$q->select( array("id","uri","pagetitle","content") );
$q->limit(2000);
$s = $q->prepare();
$s->execute();
while($row = $s->fetch(PDO::FETCH_ASSOC)) {
	print $row['pagetitle'];
}
print '<pre>'; print_r($pdo->getTime()); print '</pre>';

Результаты:

1ый запуск:
0.0021060: Total time
3 932 160: Memory usage

2ой запуск:
0.0016491: Total time
4 194 304: Memory usage
Пашок
06 апреля 2015, 20:50
modx.pro
5
4 759
+2