Игорь Терентьев

Игорь Терентьев

С нами с 29 ноября 2013; Место в рейтинге пользователей: #88
Дмитрий
26 февраля 2018, 17:23
1
0
Спасибо за подсказку.
{$_pls['tv.event_data']|strtotime|date_format:"%d %m %Y" <= ($date|date:"d/m/Y") ? ($_pls['tv.event_data']|date_format:"%d/%m/%Y") : 'Завершено'}
Евгений Шеронов
16 декабря 2017, 21:17
1
+2
Поставьте хук FormitSaveForm перед email.
&hooks=`spam,FormItSaveForm,email`

И будут доступны в чанке на почту такие плейсхолдеры:
savedForm.id: 1
savedForm.form: Заказать звонок
savedForm.context_key: web
savedForm.ip: 95.81......
и т.д.
Олег Захаров
01 декабря 2017, 01:38
1
0
в приложенной картинке пользователь с замазанными данными — реальный пользователь. Остальные боты :(
Александр
21 сентября 2017, 16:01
1
0
Добрый день. Напишите пожалуйста в скайп, контакты в профиле
DOM
DOM
12 июля 2017, 15:11
3
0
Для вообще ленивых :), авторизация Login по ajax:
Вызов:
[[!Login? &loginTpl=`lgnLoginTpl` &logoutTpl=`lgnLogoutTpl` &errTpl=`lgnErrTpl` &loginResourceId=`52` &logoutResourceId=`[[*id]]`]]

Форма:
<div class="loginForm">
    <div class="loginLogin">
        <div class="loginMessage">[[!+errors]]</div>
        <form class="loginLoginForm auth" action="[[~[[*id]]]]" method="post">
            <fieldset class="loginLoginFieldset">
                <label class="loginUsernameLabel" for="login">[[%login.username]]</label>
                <input class="loginUsername put-focus" type="text" name="username" id="login">
                <span class="error error-login"></span>
                
                <label class="loginPasswordLabel" for="pass">[[%login.password]]</label>
                <input class="loginPassword" type="password" name="password" id="pass">
                <span class="error error-password"></span>
                    
                <input class="loginRememberme" type="checkbox" name="rememberme" id="checkbox-1" checked>
                <label class="loginRemembermeLabel new-check" for="checkbox-1">Запомнить меня</label>
                
                <input class="loginLoginValue" type="hidden" name="service" value="login">
                <input type="submit" name="Login" value="[[+actionMsg]]">
                 
                <input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]">
            </fieldset>
            <div class="text-center">
                <a class="forgot-login" href="[[~45]]">Забыли логин или пароль?</a>
            </div>
        </form>
    </div>
</div>

Скрипт:
<script>
        $(document).ready(function(){
            $(".auth").bind("submit", function() {
                $("span.error, .loginMessage").text("");
                $("input.error, textarea.error").removeClass('error');
                
                if ($(".loginUsername").val().length < 1 && $(".loginPassword").val().length < 1) {
                    $(".error-login").text("Для входа введите Ваш логин");
                    $(".error-password").text("Для входа введите Ваш пароль");
                    $('.loginUsername, .loginPassword').addClass('error');
                    return false;
                }
                
                if ($(".loginUsername").val().length < 1) {
                    $(".error-login").text("Для входа введите Ваш логин");
                    $('.loginUsername').addClass('error');
                    return false;
                }
                
                if ($(".loginPassword").val().length < 1) {
                    $(".error-password").text("Для входа введите Ваш пароль");
                    $('.loginPassword').addClass('error');
                    return false;
                }
                
                $.ajax({
                        type    : "POST",
                        cache   : false,
                        url     : "[[~[[*id]]]]",
                        data    : $(this).serializeArray(),
                        success: function(data) {
                            var errMessage = $(data).find(".loginMessage").text();
                            if(errMessage == ""){
                                window.location = "[[~[[*id]]]]";
                            }else{
                                $(".error-login").text('Неправильный логин или пароль');
                                $('.loginUsername, .loginPassword').addClass('error');
                            }
                        }
                });
        
                return false;
        	});
        });
    </script>
Владимир
22 июня 2017, 14:24
1
+1
И еще, раз у вас будут языки (наверно вида site.ru/en/ ), что бы не париться с картинками и путями, сразу указывайте домен в настройке
phpthumbof.cache_url https://site.ru/
(должен быть установлен pThumb )
PS https или http — в зависимости от вашего случая
Роман
22 июня 2017, 11:52
1
0
Сделал как написал, просто думал про более элегантное выражение или/или/или = одно выражение!

Спасибо за помощь!
Володя
31 мая 2017, 11:05
1
+5
судя по этому github.com/modxcms/revolution/blob/3d6df46fe244897948e95f31604b5225e2571785/manager/assets/modext/sections/security/profile/update.js#L126
нужно создать настройку photo_profile_source и указать там источник медиа
Василий Наумкин
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 есть, но реализацию работы с ними на сайте я оставляю на совести разработчика.