Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
29 мая 2017, 08:56
4
+3
В modstore.pro всё как раз сделано через теги miniShop2.

Вывод тегов товара в чанке:
{if count($product.tags)}
	<div class="tags">
		{foreach $product.tags as $tag}
			<a href="{$packages_url}/tag/{$tag}">{$tag}</a>
	        {/foreach}
	</div>
{/if}

При клике юзер переходит по ссылке /packages/tag/любойтег, для которой должен сработать плагин OnPageNotFound, проверяющий наличие секции tag в адресе:
$uri = trim(urldecode($_SERVER['REQUEST_URI']), '/');
$tmp = explode('/', preg_replace('#\?.*#', '', $uri));
if (count($tmp) == 3 && $tmp[1] == 'tag') {
    $value = preg_replace('#[^\w\s\.-]#u', '', $this->modx->stripTags(urldecode($tmp[2])));
    if (!empty($value)) {
        $this->modx->setPlaceholder('extras_tag', $value);
        $this->modx->resource = $this->modx->request->getResource('id', $this->modx->config['packages_id']);
        if ($this->modx->resource) {
            $this->modx->resource->set('longtitle', $this->modx->resource->longtitle . " ($value)");
            $this->modx->resource->set('pagetitle', $this->modx->resource->pagetitle . " ($value)");
        }
        $this->modx->sendForward($this->modx->config['packages_id'], ['merge' => true]);
    }
}

Дальше идёт загрузка страницы с выводом каталога, на которой вызывается mFilter2, где в &element указан не msProducts, а специальный сниппет-обёртка extraProducts. Он смотрит наличие выставленного плейсхолдера extras_tag, и вызывает уже msProducts:
if ($tag = $modx->getPlaceholder('extras_tag')) {
    $table = $modx->getTableName('msProductOption');
    $c = $modx->prepare("SELECT COUNT(product_id) FROM {$table} WHERE `key` = 'tags' AND `value` = '{$tag}'");
    if ($c->execute() && !$c->fetchColumn()) {
        $modx->sendRedirect($modx->makeUrl($modx->resource->id));
    }
    $scriptProperties['innerJoin']['Tag'] = [
        'alias' => 'Tag',
        'class' => 'msProductOption',
        'on' => 'Tag.key="tags" AND Tag.product_id = msProduct.id AND Tag.value = "' . $tag . '"',
    ];
}

return $modx->runSnippet('msProducts', $scriptProperties);

Так что да, теги в miniShop2 есть, но реализацию работы с ними на сайте я оставляю на совести разработчика.
Василий Наумкин
28 мая 2017, 18:44
1
+1
А это нужно не у меня спрашивать, а у автора библиотеки Munee, которая используется в MinifyX.

Обновлений там давно нет, последний Bootstrap она не собирает. Так что да, лично я от MinifyX отказался и всем советую осваивать npm + gulp (или аналоги).
Василий Наумкин
26 мая 2017, 07:15
0
Я в Минске снимал квартиру, в которую провайдером была протянута оптика.

Так что кабели там есть, просто не везде еще.
Василий Наумкин
26 мая 2017, 06:48
+1
Я бы написал плагин на сохранение ресурса, с проверкой его группы и переносом в неё потомков.
Василий Наумкин
25 мая 2017, 11:10
0
оставил комментарий к вашему тикету
Это уведомление автору тикета.

Если автор тикета заодно еще и админ, которому должны копироваться все письма — то в этом случае ему второе письмо не придёт, достаточно и одного — как автору.

Тестировать нужно на 3х юзерах: один пишет тикет, второй коммент к нему, а третий получает bcc письмо.
Василий Наумкин
17 мая 2017, 12:19
1
+1
А я собираю всё на сервере — modhost.pro позволяет не поднимать рабочее окружение на своём компе.
'use strict';

const gulp = require('gulp'),
    sass = require('gulp-sass'),
    rename = require('gulp-rename'),
    uglify = require('gulp-uglify'),
    cssmin = require('gulp-clean-css'),
    chmod = require('gulp-chmod');
const build = './assets/';
const assets = '../../../assets/components/startpage/';

gulp.task('default', ['css', 'js']);

gulp.task('watch', function () {
    gulp.watch([build + 'scss/*.scss', build + 'scss/**/*.scss'], ['css']);
    gulp.watch([build + 'js/*.js', build + 'js/app/*.js'], ['js']);
});

gulp.task('css', function () {
    var src = build + 'scss/*.scss';
    var dst = assets + 'css/web/';
    gulp.src(src)
        .pipe(sass().on('error', sass.logError))
        .pipe(cssmin())
        .pipe(gulp.dest(dst));
});

gulp.task('js', function () {
    var src = build + 'js/*.js';
    var dst = assets + 'js/web/';
    gulp.src(src)
        .pipe(uglify().on('error', function (e) {
            console.log(e);
        }))
        .pipe(gulp.dest(dst));

    src = build + 'js/app/*.js';
    dst = assets + 'js/web/app/';
    gulp.src(src)
        .pipe(uglify().on('error', function (e) {
            console.log(e);
        }))
        .pipe(gulp.dest(dst));
});

gulp.task('copy', function () {
    var src = [
        './node_modules/backbone/backbone-min.js',
        './node_modules/underscore/underscore-min.js',
        './node_modules/alertifyjs/build/alertify.min.js',
        './node_modules/backbone.syphon/lib/backbone.syphon.min.js',
        './node_modules/jquery/dist/jquery.min.js',
        './node_modules/tether/dist/js/tether.min.js',
        './node_modules/requirejs/require.js',
        './node_modules/js-cookie/src/js.cookie.js',
        './node_modules/html5sortable/dist/html.sortable.min.js',
        './node_modules/autocomplete-js/dist/autocomplete.min.js',
        './node_modules/bootstrap/dist/js/bootstrap.min.js'
    ];
    var dst = assets + 'js/web/lib/';

    var i = 0;
    gulp.src(src)
        .pipe(uglify().on('error', function (e) {
            console.log(e);
        }))
        .pipe(chmod({
            owner: {read: true, write: true, execute: false},
            group: {read: true, write: false, execute: false},
            others: {read: true, write: false, execute: false}
        }))
        .pipe(rename(function (path) {
            path.extname = '.min.js';
            path.basename = path.basename.replace(/([-.])min/, '').replace(/\.bundle/, '').toLowerCase();
            console.log(path.basename);
        }))
        .pipe(gulp.dest(dst));

    // Fonts
    gulp.src('./node_modules/font-awesome/fonts/**').pipe(gulp.dest(assets + 'fonts/'));
});
Василий Наумкин
15 мая 2017, 18:20
0
Дело не в защите, сертификат неправильно установлен www.sslshopper.com/ssl-checker.html#hostname=yugsn.ru
You may need to install an Intermediate/chain certificate to link it to a trusted root certificate.
Василий Наумкин
15 мая 2017, 18:09
0
При добавлении сайта идёт запрос на него через cURL, и если в ответ получен пустой http_code — то ошибка. При неправильном сертификате код 0.
В общем, отключил проверку сертификата, будем посмотреть.

Кстати, скриншот через https тоже не снимался, поэтому поменял протокол на http.
Василий Наумкин
15 мая 2017, 18:05
0
У первого сайта что-то не так с сертификатом
wget https://yugsn.ru/
--2017-05-15 18:04:38--  https://yugsn.ru/
Resolving yugsn.ru (yugsn.ru)... 186.2.163.113
Connecting to yugsn.ru (yugsn.ru)|186.2.163.113|:443... connected.
ERROR: cannot verify yugsn.ru's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3’:
  Unable to locally verify the issuer's authority.
To connect to yugsn.ru insecurely, use `--no-check-certificate'.
А другие 2 добавил без проблем.
Василий Наумкин
14 мая 2017, 18:50
0
Отсюда — yandex.com/yaca/geo.c2n

Если есть более полные и надёжные источники информации, буду благодарен за ссылку.
Василий Наумкин
08 мая 2017, 11:55
+1
Исправил, спасибо!
Василий Наумкин
07 мая 2017, 09:58
+2
Учитывая, что авторы MODX всегда говорили, что в админке должны быть только доверенные юзеры, это вообще не должно быть сюрпризом.
Василий Наумкин
03 мая 2017, 09:33
+2
Ровно так же, как разговаривали на белорусском в декабре 2015.
Василий Наумкин
25 апреля 2017, 08:35
0
Смотреть всегда нужно в логи сайта и сервера, тогда будет понятно, что именно не подходит.

А так это просто угадайка.
Василий Наумкин
12 апреля 2017, 18:38
0
Мне наоборот не было нужно, чтобы отработали какие-то проверки и события с плагинами.
Василий Наумкин
12 апреля 2017, 13:05
+4
Нет. msProfile испольует всё от miniShop2.

Для продажи услуг всё равно нужен будет какой-то магазин, обработчики платежей, история заказов и личный кабинет. Так что, не понимаю проблемы — нужно просто поставить ms2 и не заморачиваться.