Наверх

Шпаргалки по MODX RSS

tvSuperSelect - выборка ресурсов по тегам с условием AND

07 декабря 2018, 08:54

Чтобы tvSuperSelect выбирал ресурсы, которые соответствуют сразу всем выбранным тегам, нужно создать копию сниппета tvssResources, назвать её, например, tvssResourcesAnd. В копию вносим следующие изменения:

// ...
    if (!empty($orConditions)) { // Заменяем код внутри этого условия
        foreach ($tags as $i => $tag) {
            $leftJoin[$alias . $i] = array(
                'class' => 'tvssOption',
                'alias' => $alias . $i,
                'on' => $alias . $i . '.resource_id = ' . $class . '.id AND ' .
                        $alias . $i . '.tv_id = ' . $tv . ' AND ' .
                        $alias . $i . '.value = "' . addslashes($tag) . '"',
            );
            $where[0][$alias . $i . '.value:!='] = null;
        }
    }
// ...

Читать дальше

Генерация YML-файла для Яндекс-Маркета

18 июня 2018, 09:44

<?php
@ini_set('display_errors', 1);

define('MODX_API_MODE', true);
require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

if ($modx->cacheManager->get('running', array('cache_key' => 'ymarket'))) {
    echo 'Скрипт работает, повторный запуск отменён';
    exit;
}

$running = true;
$modx->cacheManager->set('running', $running, 0, array('cache_key' => 'ymarket'));

$limit = 500;
$offset = $modx->cacheManager->get('offset', array('cache_key' => 'ymarket'));
$filename = MODX_BASE_PATH . 'yandexmarket.yml';
$tpl_category = '@INLINE <category id="{$id}"{if $parent &&
     ($parent | resource : "class_key") == "msCategory"} parentId="{$parent}"{/if}>{$menutitle ?: $pagetitle}</category>';
// ...

Читать дальше

Программное создание и заполнение опций товара miniShop2

09 апреля 2018, 08:39

<?php
$resources = array($modx->getObject('modResource', $id));

$miniShop2 = $modx->getService('miniShop2');
require_once MODX_CORE_PATH . 'components/simplehtmldom/simple_html_dom.php';
foreach ($resources as $res) {
    $content = $res->get('content');
    $props = $res->getProperties();
    if (!isset($props['original_content']) || !$props['original_content']) {
        $props['original_content'] = $content;
        $res->setProperties($props);
        $res->save();
    }
    $html = str_get_html($content);
    $characters = $html->find('.character');
    $content = $html->find('.content', 0)->innertext;
    foreach ($characters as $char) {
        $name = $char->find('span', 0)->innertext;
        $val = $char->find('span', 1)->innertext;
        print '<b>'.$name . ' - ' . $val . '</b>' . PHP_EOL;
        if (!$option = $modx->getObject('msOption', array('caption' => $name))) {
            print 'Option not found' . PHP_EOL;
            $key = $res->cleanAlias($name);
            if ($found = $modx->getObject('msOption', array('key' => $key))) {
                print 'Option key exists' . PHP_EOL;
                $key = $key . '_2';
            }
            $option = $modx->newObject('msOption');
            $option->fromArray(array('key' => $key, 'caption' => $name, 'type' => 'textfield'));
            $option->save();
            print 'Option '.$key.' created' . PHP_EOL;
        } else {
            print 'Option found' . PHP_EOL;
        }
        if (!$cop = $modx->getObject('msCategoryOption', array('option_id' => $option->id, 'category_id' => $res->parent))) {
            print 'Category option not found' . PHP_EOL;
            $table = $modx->getTableName('msCategoryOption');
            $sql = "INSERT INTO {$table} (`option_id`,`category_id`,`active`) VALUES ({$option->id}, {$res->parent}, 1);";
            $stmt = $this->modx->prepare($sql);
            $stmt->execute();
            print 'Category option created' . PHP_EOL;
        } else {
            print 'Category option found' . PHP_EOL;
            $q = $modx->newQuery('msCategoryOption');
            $q->command('UPDATE');
            $q->where(array('option_id' => $option->id, 'category_id' => $res->parent));
            $q->set(array('active' => 1));
            $q->prepare();
            $q->stmt->execute();
            print 'Category option updated' . PHP_EOL;
        }
        
        if ($po = $modx->getObject('msProductOption', array('product_id' => $res->id, 'key' => $option->key))) {
            print 'Value found' . PHP_EOL;
            $q = $modx->newQuery('msProductOption');
            $q->command('UPDATE');
            $q->where(array('key' => $option->key));
            $q->set(array('value' => $val));
            $q->prepare();
            $q->stmt->execute();
            print 'Value updated' . PHP_EOL;
        } else {
            print 'Value not found' . PHP_EOL;
            $table = $modx->getTableName('msProductOption');
            if (!is_int($val)) {
                $val = '"' . $val . '"';
            }
            $sql = "INSERT INTO {$table} (`product_id`,`key`,`value`) VALUES ({$res->id}, \"{$option->key}\", {$val});";
            $stmt = $this->modx->prepare($sql);
            $stmt->execute();
            print 'Value created' . PHP_EOL;
        }
    }
}

Читать дальше

Добавление возможности указать контекст в CatalogFill

27 октября 2017, 15:56

// ...
    public function xls_export($parent_id, $xls_type='Excel5'){
        if (!is_numeric($parent_id)) {
            $this->config['context'] = $parent_id;
            $parent_id = 0;
        }
        require_once realpath(dirname(__FILE__)).'/PHPExcel.php';
        
        $out = array('count'=>0,'filepath'=>'','filename'=>'');
        
        if ($parent_id) {
            $parent_folder = $this->modx->getObject('modResource',$parent_id);
            $this->config['context'] = $parent_folder->get('context_key');
        }
        
        if($this->config['include_categories']){
// ...

Читать дальше

Отдать пользователю ответ, но продолжить обработку данных

14 октября 2017, 17:14

<?php
$modx->log(1, 'First log: ' . date('H:i:s', time() + 60 * 60 * 2));
if (function_exists('fastcgi_finish_request')) {
    echo 'Готово';
    session_write_close();
    fastcgi_finish_request();
}
sleep(10);
$modx->log(1, 'Second log: ' . date('H:i:s', time() + 60 * 60 * 2));

Читать дальше

mFilter2 - Вывод результатов на отдельной странице

05 августа 2017, 09:35

<script>
    $(document).ready(function(){
        $(document).on('mse2_load', function(e, data) {
            document.location.href = '{$_modx->makeUrl(35)}' + e.currentTarget.URL.replace('{$_modx->config.site_url}{$_modx->resource.uri}', '');
        });
    });
</script>

Читать дальше

mFilter2 - фильтрация по кнопке (выключить автофильтр)

05 августа 2017, 09:28

<script>
    $(document).ready(function(){
        $(document).off('change', '#mse2_filters');
        $('#mse2_filters [type="submit"]').removeClass('hidden');
    });
</script>
или
&filterOptions=`{"autoLoad":0}`

Читать дальше

Вывод всех тегов ms2Gallery

07 июля 2017, 08:12

{'pdoResources' | snippet : [
    'loadModels' => 'ms2gallery',
    'class' => 'msResourceFileTag',
    'leftJoin' => '{
        "File":{ "class":"msResourceFile", "on":"File.id = msResourceFileTag.file_id" }
    }',
    'select' => '{
        "msResourceFileTag": "*",
        "File": "*"
    }',
    'where' => '{ "File.resource_id": ' ~ $_modx->resource.id ~ ' }',
    'groupby' => 'tag',
    'sortby' => '{ "tag":"ASC" }',
    'limit' => 0,
    'tpl' => '@INLINE <span>{$tag}</span>'
    'outputSeparator' => ', '
]}

Читать дальше

Проверка отправки почты в MODX

16 июня 2017, 15:55

Запустить код в дополнении Console:
<?php
$to    = 'site@mail.ru';
$theme = 'Site URL: ' . $modx->getOption('site_url');
$body  = 'Test mail message';
$from  = $modx->getOption('emailsender');

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->address('to', $to);
$modx->mail->set(modMail::MAIL_FROM, $from);
$modx->mail->set(modMail::MAIL_FROM_NAME, 'Console');
$modx->mail->set(modMail::MAIL_SUBJECT, $theme);
$modx->mail->set(modMail::MAIL_BODY, $body);
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
    echo 'Sending failed. Error: ' . $modx->mail->mailer->ErrorInfo;
} else {
    echo 'Success';
}
$modx->mail->reset();

Читать дальше

Плавный скроллинг по клику на ссылку

16 июня 2017, 15:33

<a href="#" onclick="
  $('body,html').animate({
    scrollTop: $('.contacts').first().offset().top
  }, 600);
  return false;
">Обратная связь</a>

Читать дальше

Авторизация

через сервис Loginza:

Подписка или RSS

Буду присылать новые статьи — никакого спама



Шаблоны MODX

1 2 Дальше »

Объектная
модель
MODX