Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
18 сентября 2017, 22:35
1
0
У Александра в коде ошибка. Он не обозначил метод, с которым работаем… Видимо не проверял код. В данном случае это «crm.lead.add».

1) Вот это положить в assets/b24/bxresthandler.class.php:
<?php
class bxRestHandler
{
    public $url;
    public $config = array();
    /** @var modX $modx */
    protected $modx;
    
    /**
     * @param modX  $modx
     * @param array $config
     */
    public function __construct(modX &$modx, array $config = array())
    {
        $this->modx = &$modx;
        $this->config = &$config;
        $this->url = $this->config['url'] ?: $this->modx->getOption('bx24_resturl');
    }
    
    /**
     * @param string $action
     * @param array  $data
     * @param string $method
     */
    public function request($action, array $data = array(), $method = 'GET')
    {
        if (empty($this->url)) {
            return $this->failure('Empty url');
        }
        
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $this->url . $action,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_POST => ($method == 'POST'),
            CURLOPT_POSTFIELDS => http_build_query($data),
        ));
        $response = curl_exec($curl);
        if ($errno = curl_errno($curl)) {
            $result = $this->failure('Bad request', array(
                'errorCode' => $errno,
                'errorMessage' => curl_error($curl),
            ));
        } else {
            if ($response = $this->modx->fromJSON($response)) {
                if (empty($response['error']) && empty($response['error_description'])) {
                    $result = $this->success('', $response);
                } else {
                    $result = $this->failure(($response['error_description'] ?: $response['error']), $response);
                }
            } else {
                $result = $this->failure('Bad JSON string');
            }
        }
        curl_close($curl);
        
        return $result;
    }
    
    /**
     * @param string $message
     * @param array  $data
     *
     * @return array
     */
    public function success($message = '', $data = array())
    {
        return array(
            'success' => true,
            'message' => $message,
            'data' => $data,
        );
    }

    /**
     * @param string $message
     * @param array  $data
     *
     * @return array
     */
    public function failure($message = '', $data = array())
    {
        return array(
            'success' => false,
            'message' => $message,
            'data' => $data,
        );
    }
}

2) Создать настройку bx24_resturl с УРЛом вебхука.

3) Создать сниппет-хук для FormIt bx24FormItHook:
<?php
if (!$bx = $modx->getService('bxresthandler', 'bxRestHandler', MODX_ASSETS_PATH . 'b24/', array(
    'url' => $modx->getOption('bx24_resturl'),
))) {
    return;
}
if (!is_object($hook)) {
    return;
}
$data = $hook->getValues();
if (!empty($data['form'])) {
    $bx->request('crm.lead.add', array(
        'fields' => array(
            'TITLE' => $data['form'],
            'COMMENTS' => $data['comment'] ?: '',
            
            // Контакт
            'NAME' => $data['name'],
            'PHONE' => array(array(
                'VALUE' => $data['phone'],
                'VALUE_TYPE' => 'WORK',
            )),
            'EMAIL' => array(array(
                'VALUE' => $data['email'],
                'VALUE_TYPE' => 'WORK',
            )),
            'ADDRESS_CITY' => $data['city'] ?: '',
            
            //
            'SOURCE_ID' => $data['source_id'], // ID источника
            'ASSIGNED_BY_ID' => 56, // ID ответственного
        ),
    ));
}

4) Вызывать примерно так:
{'!AjaxForm' | snippet :[
    'snippet' => 'FormIt',
    'hooks' => 'email,bx24FormItHook',
    'form' => 'tpl.AjaxForm.example',
]}

5) Чанк tpl.AjaxForm.example содержит форму с полями, которые используются в сниппете-хуке bx24FormItHook:
<input type="hidden" name="form" value="Контакты">
<input type="text" name="name" value="">
<input type="text" name="phone" value="">
<input type="text" name="email" value="">
<input type="text" name="city" value="">
<textarea name="comment"></textarea>
Павел Гвоздь
18 сентября 2017, 17:04
+1
Пакет завязан на ресурсы по-умолчанию. Хоть и использует дополнительную таблицу для хранения свойств, эта таблица связана с таблицей ресурсов. Товар — это ресурс. Категория — это ресурс.
Павел Гвоздь
18 сентября 2017, 16:16
+1
Володя говорит про работу не с ресурсами, а с кастомными объектами. Для этого необходимо переписывать нативные классы минишоп для работы с корзиной, с заказами и т.д. Благо мс2 позволяет.
Павел Гвоздь
10 сентября 2017, 18:38
0
Пишите.
Скайп pavelgvozdb
Павел Гвоздь
05 сентября 2017, 22:37
+1
Удивительно! Нынче самостоятельно искать решение в Интернетах не модно, видимо…
Павел Гвоздь
05 сентября 2017, 12:20
0
Адекватные — это сколько? 5кр за сайт?
Извиняюсь, конечно, не к вам претензия, а вообще! Ибо устал уже переделывать эти неадекватные сайты по адекватным ценам… Особенно «нравятся» поделки, аля Фабрика Сайтов. Вот и думай потом, что лучше: переплатить и получить качественный сайт, дорабатывать который будет гораздо дешевле, или найти адекватную цену и получить хренпойми что, за каждый мелкий фикс/доработку костыль которого придется переплачивать раза в 3.
Павел Гвоздь
05 сентября 2017, 11:34
1
0
Обращайтесь. Ценник будет несколько повыше, чем у многих. Однако и качество на уровне.
Скайп pavelgvozdb
Павел Гвоздь
04 сентября 2017, 13:47
0
Эм. А вы уверены, что переменная $link_ids что-то содержит? Я вот, почему-то, не видя сайт и не имея возможности дебага, склоняюсь к тому, что в переменной $link_ids пустота…
Павел Гвоздь
04 сентября 2017, 13:42
0
А что в переменной $link_ids?
Павел Гвоздь
04 сентября 2017, 13:29
0
Смотрите:
Во-первых, выше уже сказано, что для pdoResources привычен параметр depth.
Во-вторых, вы не совсем верно указываете параметры переменными. Надо:
'resources' => $link_ids,
, а у вас:
'resources' => '{$link_ids}',
В-третьих, если ничего не поможет — попробуйте некешированный вызов.
Павел Гвоздь
04 сентября 2017, 05:31
0
Пишите.
Скайп: pavelgvozdb
Павел Гвоздь
03 сентября 2017, 13:49
0
А при чем тут это?
Павел Гвоздь
03 сентября 2017, 13:44
0
Лучше исходники не править. Есть возможность сделать правильнее, продублировав этот класс, обозвав по-иному и создав свой способ доставки на основе оного.
Павел Гвоздь
01 сентября 2017, 13:56
0
Вызываете
[[!MinifyX]]
или
[[MinifyX]]
?