Олег Захаров

Олег Захаров

С нами с 14 октября 2017; Место в рейтинге пользователей: #134
Сергей Водолагин
16 декабря 2017, 13:21
2
+2
Поменяйте 2 настройки в Системных настройках => Дружественные URL =>

1) Использовать вложенные URL ( use_alias_path ) Да поменяйте на Нет.
2) Суффикс контейнера ( container_suffix ) / удалите.
URL станут без промежуточных site.ru/категория site.ru/товар1, site.ru/товар2

3) в Breadcrumbs будет полный вывод для новый и старый укажите их id для исключения или сделать не активную ссылку
[[pdoCrumbs?
	....
	&exclude=`id,id`
	.....
]]
или
[[pdoCrumbs?
  &exclude=``
  &showHome=`0`
  &outputSeparator=` `
  &tplWrapper=`@INLINE <ul itemscope="" itemtype="http://schema.org/BreadcrumbList" class="breadcrumbs">{$output}</ul>`
  &tpl=`@INLINE <li><span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
{set $acode = [3,5,14,16,26,37]}
{if $id in list $acode}
  <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
{else}
  <a title="{$menutitle}" itemprop="item" href="{$link}">
  <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
</a>
{/if}
</span></li>`
  &tplCurrent=`@INLINE 
  <li><span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
      <span itemprop="name">{$menutitle}</span><meta itemprop="position" content="{$idx}">
  </span></li>`
]]
4) В ресурсах -Новый -Старый снимите галочку Доступен для поиска чтобы в Sitemap не попадали.

Всё это вам даст отличные возможности по SEO при перемещение ресурса из -Новый в -Старый у вас url не меняется а значит вес и индексация страницы всегда будет с ней!!!
Олег Захаров
01 декабря 2017, 17:16
1
0
Кто нибудь приобретал этот терминал и настраивал с Modx?
Олег Захаров
28 ноября 2017, 03:21
1
0
У меня клиент сделал несколько оплат для теста самому себе — после 01.07.17. Надо ли выбивать себе чек? Если ИП платит самому себе? Если это тестовые платежи?
Алексей Ерохин
01 ноября 2017, 15:15
1
0
Так сделано в modx, от контекста только ключ.

Можете попробовать в плагине на событие OnMODXInit дописывать в объект необходимые данные контекста.
$context= $modx->getObject('modContext',['key'=>$modx->context->key]);
$modx->context->_fields['name'] = $context->get('name');
$modx->contexts[$modx->context->key] = $modx->context;
Не уверен, что потом где-нибудь не всплывет бага. Лучше напишите сниппет для получения данных контекста и используйте его.

Или как вариант: записать в настройки контекста его имя и описание и получать через {$_modx->config.context_name}
Олег Захаров
14 октября 2017, 12:18
1
0
Спасибо! У меня так возникла проблема с кодом пикселя от Facebook. Стал неправильно отрабатывать кусок кода с условием {if is_auth()}. По логу журнала ошибок выявил момент начала появления ошибок и понял что это началось в момент добавления пикселя. Обернул код пикселя в {ignore}… {/ignore} и все нормально заработало. Что интересно, до этого был установлен код Метрики, в котором есть фигурные скобки — но на него система не ругалась.
В любом случае {ignore} выручает. Т.к. есть потребность частого использования стороннего кода Facebook для прописывания целей — {ignore} выручает от конфликта Fenom.
Роман Ильин
12 сентября 2017, 23:09
12
+2
Сниппет для удаления старых версий:

<?php
/**
 * versionCleanX
 *
 * @author Scott Pronych, September 27, 2013
 *
 * DESCRIPTION
 *
 * For use with VersionX to delete old content
 *
 * PROPERTIES:
 *
 * &contentType - can be resource, chunk, plugin, snippet, template, or templatevar
 * &maxVersions - integer value for max number of versions you would like to keep
 *
 * USAGE:
 *
 * [[!versionCleanX? &contentType=`resource` &maxVersions=`10`]]
 *
 */
 
$cx_type = $modx->getOption('contentType', $scriptProperties, 'resource');
$cx_max = (int) $modx->getOption('maxVersions', $scriptProperties, 5);
 
$GLOBALS['count'] = 1;
$GLOBALS['total'] = 0;
$GLOBALS['deleted'] = 0;
$GLOBALS['page_total'] = 0;
$GLOBALS['page_deleted'] = 0;
$GLOBALS['page_name'] = '';
$GLOBALS['prev_content_id'] = 0;
$GLOBALS['prev_version_id'] = 0;
 
switch ($cx_type) {
    case 'chunk':
        $name = 'name';
        break;
    case 'plugin':
        $name = 'name';
        break;
    case 'snippet':
        $name = 'name';
        break;
    case 'template':
        $name = 'templatename';
        break;
    case 'templatevar':
        $name = 'name';
        break;
    default:
        $name = 'title';
        $cx_type = 'resource';
}
 
$GLOBALS['db_name'] = 'modx_versionx_' . $cx_type;
 
function delete_row ($id) {
    global $modx;
    $query = "DELETE FROM `" . $GLOBALS['db_name'] . "` WHERE version_id = '" . $id . "'";
    $result = $modx->query($query);
    if (!is_object($result)) return false;
    else {
        $GLOBALS['deleted']++;
        $GLOBALS['page_deleted']++;
        $GLOBALS['page_total']++;
        $GLOBALS['total']++;
        $GLOBALS['count']++;
        return true;
    }
}
 
function log_row () {
    $GLOBALS['data'] .= '<tr><td>' . $GLOBALS['page_name'] . '</td><td>' . $GLOBALS['page_total'] . '</td><td>' . $GLOBALS['page_deleted'] . "</td></tr>\n";
    $GLOBALS['page_deleted'] = 0;
    $GLOBALS['page_total'] = 1;
    $GLOBALS['count'] = 1;
}
 
$query = "SELECT version_id, content_id, " . $name . " AS page_title FROM `" . $GLOBALS['db_name'] . "` ORDER BY content_id ASC, version_id DESC";
 
$GLOBALS['data'] = '';
$output = 'An error occurred: ';
$versionx = $modx->query($query);
if (!is_object($versionx)) {
   return $output . 'query error ' . print_r($modx->errorInfo(), true);
}
else {
 
while($row = $versionx->fetch(PDO::FETCH_ASSOC)) {
    // New content_id so reset
    if ($prev_content_id == 0) {
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
        $GLOBALS['total']++;
        $GLOBALS['page_total']++;
        $GLOBALS['count']++;
        $GLOBALS['page_name'] = $row['page_title'];
    }
    elseif ($prev_content_id != $row['content_id']) {
        if ($GLOBALS['count'] > $cx_max) {
            if (!delete_row($prev_version_id)) return $output .  'deleting row for ' . $GLOBALS['page_name'] . ' Row: ' . $prev_content_id . ' ' . print_r($modx->errorInfo(), true);
            $GLOBALS['page_total']--;
 
        }
        else {
            $GLOBALS['total']++;
            $GLOBALS['count']++;
        }
        log_row();
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
        $GLOBALS['page_name'] = $row['page_title'];
    }
    // Content count is over the max so delete previous row
    elseif ($GLOBALS['count'] > $cx_max) {
            delete_row($prev_version_id);
            $prev_content_id = $row['content_id'];
            $prev_version_id = $row['version_id'];
    }
    else {
        $GLOBALS['count']++;
        $GLOBALS['page_total']++;
        $GLOBALS['total']++;
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
    }
}
log_row();
 
if ($GLOBALS['data'] != '') {
$output = '<h3>VersionX Cleanup for ' . $GLOBALS['db_name'] . '</h3>
<p>Total records: <strong>' . $GLOBALS['total'] . '</strong>
Total deleted: <strong>' . $GLOBALS['deleted'] . '</strong></p>
<table class="table table-striped">
<thead>
<tr>
<th>Page name</th>
<th>Total found</th>
<th>Deleted</th>
</tr>
</thead>
<tbody>
' . $GLOBALS['data'] .  '</tbody></table>
';
}
else $output = 'Error: no data found.';
}
 
$query = "OPTIMIZE TABLE `" . $GLOBALS['db_name'] . "`";
$versionx = $modx->query($query);
if (!is_object($versionx)) {
   $output = 'Optimize error ' . print_r($modx->errorInfo(), true) . $output;
}
 
return $output;


Вызывать так:
[[!versionCleanX? &contentType=`resource` &maxVersions=`10`]]
Володя
01 сентября 2017, 15:45
1
0
есть метод SubscriptionAppend
$payandsee = $modx->getService('payandsee');
$payandsee->SubscriptionAppend($resource_id, $user_id, $period = 30, 1)
Сергей
Сергей
01 сентября 2017, 00:14
9
0
Тщательно пережевав это modx.pro/help/7693/#comment-53831, решил свой вопрос — Как вывести два фото к каждому товару на странице категории:
в шаблоне категории вызываю список товаров так:
[[!pdoPage?
	&element=`msProducts`
	&loadModels=`gallery`
	&leftJoin=`{
		"360x270": {"class":"msProductFile","alias":"360x270", "on": "360x270.product_id = msProduct.id AND 360x270.path LIKE '%/360x270/' AND 360x270.rank=0"}
		,"360x270x1": {"class":"msProductFile","alias":"360x270x1", "on": "360x270x1.product_id = msProduct.id AND 360x270x1.path LIKE '%/360x270/' AND 360x270x1.rank=1"}
	}`
	&select=`{
		"msProduct":"*"
		,"360x270":"360x270.url as 360x270"
		,"360x270x1":"360x270x1.url as 360x270x1"
	}`
]]
и в чанке tpl.msProducts.row.php вывожу ДВА фото товара так:
<img src="[[+360x270:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]">
<img src="[[+360x270x1:default=`[[++assets_url]]components/minishop2/img/web/ms2_small.png`]]">
Количество запросов снизилось вдвое, время загрузки страницы упало в полтора раза.
Извините, если кому наступил на мозоль, разжевав досконально, я знаю, что тут это не приветствуется...)))
Азамат
17 августа 2017, 08:15
1
0
Извините за некропостинг, но может добавить в документацию по pdoCrumbs параметр scheme?

[[pdoCrumbs?
	&scheme=`abs`
]]

Сегодня тоже столкнулся с этой странной проблемой, но в доках данного параметра нет, пришлось гуглить до этого топика :)

docs.modx.pro/components/pdotools/snippets/pdocrumbs
Дмитрий Храмов
12 июня 2017, 19:18
1
0
webstool.ru/kursyi-valyut-s-cbr.ru-na-php.html
вот с этим сниппетом проблем не возникло
Сниппет для MODX — getCurRate
if(empty($_SESSION['cbr_eur']) || empty($_SESSION['cbr_usd'])) {
    $xml = simplexml_load_string(file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp"));
    $json = json_encode($xml);
    $array = json_decode($json);
    if(empty($input)){
        $input = 0;
    }
    $input = $input;
    $eur = 0;
    $usd = 0;
    foreach($array->Valute as $v){
        if(strtolower($v->CharCode) == "eur"){
            $eur = $v->Value;
        }
        if(strtolower($v->CharCode) == "usd"){
            $usd = $v->Value;
        }
    }
    $_SESSION['cbr_eur'] = $eur;
    $_SESSION['cbr_usd'] = $usd;
}else{
    $eur = $_SESSION['cbr_eur'];
    $usd = $_SESSION['cbr_usd'];
}
if(strtolower($cur_input) == "rub"){
    if(strtolower($cur_output) == "eur"){
        return $input/$eur;
    }
    if(strtolower($cur_output) == "usd"){
        return $input/$usd;
    }
}
if(strtolower($cur_input) == "eur"){
    if(strtolower($cur_output) == "rub"){
        return $input*$eur;
    }
    if(strtolower($cur_output) == "usd"){
        return $input*($eur/$usd);
    }
}
if(strtolower($cur_input) == "usd"){
    if(strtolower($cur_output) == "rub"){
        return $input*$usd;
    }
    if(strtolower($cur_output) == "eur"){
        return $input/($eur/$usd);
    }
}
if(strtolower($cur_output) == "rubinusd"){
    return $usd;
}
if(strtolower($cur_output) == "rubineur"){
    return $eur;
}
return "getCurRate"; //Если что-то пошло не так
Использование сниппета getCurRate

[[!getCurRate?&cur_output=`rubinusd`]] — Курс USD
[[!getCurRate?&cur_output=`rubineur`]] — Курс EUR
[[!getCurRate?&input=`2700`&cur_input=`rub`&cur_output=`usd`]] — Переводо RUB в USD
[[!getCurRate?&input=`132`&cur_input=`usd`&cur_output=`rub`]] — Переводо USD в RUB
Использование инструмента вне MODX

Тот же самый код, лишь оборачиваем его в функцию(). Показать
<?php echo getCurRate(0, '', 'rubinusd'); ?> — Курс USD
<?php echo getCurRate(0, '', 'rubineur'); ?> — Курс EUR
<?php echo getCurRate(2700, 'rub', 'usd'); ?> — Переводо RUB в USD
<?php echo getCurRate(132, 'usd', 'rub'); ?> — Переводо USD в RUB

Допилить под собственные нужна не проблема