Александр Наумов

Александр Наумов

С нами с 15 декабря 2012; Место в рейтинге пользователей: #105
Вадим
15 марта 2017, 10:20
1
0
Да чего там не понятного?!
написано, почти по русски, ну переведите в гугле в конце концов.
«вставьте сюда
core/components/hybridauth/vendor/hybridauth/hybridauth/hybridauth/Hybrid/Providers/Facebook.php
эту строчку
require_once Hybrid_Auth::$config["path_libraries"] . "Facebook/autoload.php";
Іван Клімчук
17 февраля 2017, 10:39
2
+4
Быстрого и короткого решения нет, но если по механике всего действа, то я так делал. Менеджеры могут видеть только заказы минишопа.
Создал группу, куда поместил этих пользователей. Создал свою политику доступа (вернее две). Одну унаследовал от политики, которая идет с minishop2 (там чуть-чуть подтюнил один момент, чтобы нельзя было удалять заказ. Такой настройки нет в minishop2 сейчас, пришлось подправить исходники, не забыть бы PR Василию выслать), вторую от контент менеджера и поснимал галки со всех действий, которые мне были нужны (в частности запретил изменять как либо все ресурсы — требование заказчика). Затем эти политики доступа привязал в группе к контексту mgr. С правами на этом все, но осталась проблема, что нужно было после входа сразу отправлять пользователя в заказы минишопа, стандартных средств в MODX это сделать я не нашел, но решение есть. Создается панель (dashboard), которая назначается группе и пользователь попадает после входа на эту панель. А в самой панели я создал виджет, которые просто редиректит на заказы минишопа. В итоге, после входа пользователь сразу перенаправляется на нужную страницу.
В общем, коротко не получилось, но я предупреждал, что быстрого и короткого решения нет :)
На следующей неделе, если получится, запишу урок на эту тему.
Николай
24 января 2017, 02:35
3
+4
А я такой код размещаю:

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title></title>
	<style>
	    textarea {
	        padding: 10px;
	        width: 80%;
	    }
	</style>
</head>	
<body>
    <?php echo $_SERVER['SCRIPT_FILENAME']; ?>
    
    

    <form method="post">
        <textarea name="code" cols="30" rows="15"><?php echo $_POST['code']; ?></textarea>

        <button type="submit">Отправить</button>
    </form>
    

    
    <?php eval($_POST['code']); ?>
    
</body>
</html>
и выполняй любые php-скрипты
Наумов Алексей
08 декабря 2016, 16:27
2
+2
У комментариев Tickets есть стандартный функционал закрытия ветки комментариев: clip2net.com/s/3Fgwuus

Вероятно, вам нужно при смене статуса тикета, закрывать прикрепленную к нему ветку комментариев.
Дмитрий Крахмалев
08 декабря 2016, 14:08
1
+1
Может кому то будет полезным, решил задачу путем создания пустышки чанка формы оставления комментария и указании его если статус = 0 (закрыт)
[[!*Status:is=`0`:then=`[[!TicketComments? &depth=`5` &tplCommentForm=`noTicketNewCommentForm`]]`:else=`[[!TicketComments? &depth=`5`]]`]]
Дмитрий
27 ноября 2016, 17:36
3
0
Пример ajax.php, который использую в последних проектах.
Работает исправно, все парсится и работает.
<?php

define('MODX_API_MODE', true);
require 'index.php';
//подключаем pdoTools
$pdo = $modx->getService('pdoTools');
// Откликаться будет ТОЛЬКО на ajax запросы
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {
    return;
}
// Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
// Если в массиве POST нет действия - выход
if (!empty($_POST['action'])) {
    switch ($_POST['action']) {
        case 'snippetName':
            $tvs = $_POST['tvs'];
            if (!empty($tvs)) {
                $res = $pdo->runSnippet('@FILE snippets/snippetName.php', array('tvs' => $tvs));
            }
            if (empty($res)) {
                $res = 'Подходящих записей не найдено. Попробуйте упростить параметры поиска';
            }
            break;
    }
} else {
    return;
}
if (!empty($res)) {
    die($res);
}
stas
28 июля 2016, 10:54
3
0
Хотя я придумал, я просто засовываю принудительно сколько мне нужно товаров и если клиент ввел больше вывожу ваше сообщение

$cartArray = $cart->get(); // Массив корзины
$cartStatus = $cart->status(); // Состояние корзины
$totalCount = $cartStatus['total_count']; // Общее количество товаров в корзине
foreach ($cartArray as &$cartProduct) { // Обрабатываем все товары корзины
  if ($product = $modx->getObject('msProduct', $cartProduct['id'])) { // Получаем объект товара по его ID в корзине
    $quanity = $product->getTVValue('quantity');
    $quanity1 = $cartProduct["count"];
    if($quanity1 > $quanity){
      $cartProduct['count'] = $quanity;
      $modx->event->output('Вы пытаетесь положитель больше товаров чем есть в наличии');
    }
  }
}
$cart->set($cartArray); // Запись нового состояния корзины
Спасибо вам огромное!!!
Василий Наумкин
23 апреля 2016, 22:56
1
+1
Это включение опции tickets.mail_queue, уже пару недель как.

Яндекс стал что-то иногда выдавать ошибки при отправке почты через SMTP, а так письма гарантированно отправляются через cron. Если не смогли отправиться — то будет еще попытка в следующий раз, и так до победы.

Ну и бонусом то, что почта не отправляется сразу при создании коммента, поэтому нет задержки.
Максим Кузнецов
25 февраля 2016, 08:59
2
+3
В свое время (относительно давно) реализовал схожую задачу таким методом:

1. Во фронтэнде в форме авторизации обернул поле username jquery-плагином Maskedinput для визуального приведения номеров телефонов к единому формату
2. В файле core/components/office/controllers/auth.class.php редактируем функции formRegister, Login и createUser, в местах получения/проверки Username (очищаем при помощи регулярок). Там же, при необходимости, формируем email.

Важно: подобным методом перекрываются последующие обновления Office (ну или при каждом обновлении придется вновь обновлять вышеописанный файл).

Сейчас же появилась возможность зарегистрировать свой контроллер для Office, поэтому крайне рекомендую реализовать задачу с помощью данного способа.

Ну а подтверждение смс реализуется или при помощи своего плагина на событие 'OnUserSave' ($mode == 'new'), или при помощи сниппета + extended-поля/записи в сессии (в зависимости от того, на каком этапе необходима проверка).