TITAN-UZ

TITAN-UZ

С нами с 27 февраля 2014; Место в рейтинге пользователей: #56

Как изменить rel="canonical" в "Человекопонятной навигации", выполненной по инструкции pdoPage?

Подскажите, как исправить следующее.
Воспользовался инструкцией "Человекопонятная навигация"

В результате при переходе на страницу отличную от первой в исходном коде страницы meta тег rel=«canonical» ведет не на каноническую страницу (как было до изменений без параметров page-№), а на текущую, и выглядит следующим образом:

<link rel="canonical" href="https://mysite.ru/category/page-2"/>
<link rel="canonical" href="https://mysite.ru/category/page-3"/>

Немного переделал под свои нужды URLы страниц пагинации, но сути не меняет, rel=«canonical» все равно ведет на текущую страницу:
<link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="canonical" href="https://mysite.ru/category/page/3/"/>

Подскажите, как сделать, чтобы rel=«canonical» при нахождении на любой странице пагинации вел на первую страницу пагинации, вот так:
<link rel="canonical" href="https://mysite.ru/category/"/>

Вот мой код шаблона:
[[!pdoPage@MyPagination?
&element=`pdoResources`
&limit=`3`
&parents=`{$_modx->resource.id}`
&hideContainers=`1`
&fastMode=`1`
&sortby=`publishedon`
&sortdir=`ASK`
&pageLinkScheme=`[[+pageVarKey]]/[[+page]]/`
&includeTVs=`img_sh,alt_img_sh`
&tpl=`@FILE chunks/sh/sh.tpl` 
]]	  
	  
[[!+page.nav]]
Код плагина:
<?php
// Реагируем только на событие OnPageNotFound
if ($modx->event->name == 'OnPageNotFound') {
    // Определяем ключ запроса из настроек
    $req = $modx->getOption('request_param_alias');
    // Ловим нужный ключ страницы
    $pageVarKey = 'page';
    // Если в запросе повторяется наш шаблон "pageVarKey-page", то работаем дальше
    if (preg_match("#.*?(/{$pageVarKey}/(\d+))/#", $_REQUEST[$req], $matches)) {
        // Отрезаем ЧПУ строку и получаем точный адрес текущей страницы
        $uri = str_replace($matches[1], '', $matches[0]);

        // Ищем страницу по этому адресу
        $id = 0;
        // Сначала как есть, со слешем на конце
        if (!$id = $modx->findResource($uri)) {
            // Если не находим - то пробуем отрезать слэш и ищем повторно
            $id = $modx->findResource(rtrim($uri, '/'));
        }

        // Если ресурс найден
        if ($id) {
            // Добавляем номер страницы в глобальные массивы, чтобы pdoPage их там увидел
            $_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
            // И загружаем эту страницу
            $modx->sendForward($id);
        }
        // Если ресурс не был найден - ничего не делаем, возможно запрос поймает другой плагин
    }
}

Заранее, благодарю!
Дмитрий
16 декабря 2018, 05:16
modx.pro
1
2 642
0

Расшифровка json для вывода числа посетителей из Яндекс.Метрика API

Здравствуйте! Прошу заранее прощения, мягко говоря не профи в программировании.
Spirit_Ninja
11 декабря 2018, 18:51
modx.pro
1
934
-1

[MIGX] - Большой и страшный. Multiple Formtabs. Как сделать слайдер с разными типами слайдов.

Привет сообществу!

В данной заметке вы узнаете, что такое Multiple Formtabs и как создать конфигурацию с разным набором данных. Ну и конечно же создадим с вами слайдер у которого будут разные типы слайдов, а в конце вас ждёт очень интересная история которую я долго не решался кому либо рассказать (если конечно вам интересно, но история интересная — поверьте). И так, примеры слайдов:

  • Изображение на фоне
  • Видео на фоне
  • Сплошной цвет на фоне
Внимание! В этот раз не надо убирать от экранов детей и беременных женщин, ведь это какая-та дискриминация по возрастному и половому признакам!

Баха Волков
11 октября 2018, 07:46
modx.pro
36
7 547
+27

Стоимость товара для каждой позиции в корзине

Все привет!

Как вывести общую стоимость каждой позиции в корзине?
Раньше выводил:
[[+price:mpy=`[[+count]]`]]
Сейчас в чанке корзины вывод значений
{$product.price}
А как подключить к выводу phx я не понимаю.

Подскажите, кто сталкивался.

Спасибо!

Решение:

Вывод в корзине:
<div class="group">
   <div class="weight">
        <span>{$product.weight}</span> гр./шт.
   </div>
   <div class="total_weight">
        <span>{$product.count * $product.weight}</span> гр.
    </div>
</div>
<div class="group">
    <div class="price">
         <span>{$product.price}</span> руб./шт.
     </div>
     <div class="total_price">
         <span>{$product.cost}</span> рублей
     </div>
</div>
Скрипт на обновление сумм:
$( '#msCart input[name="count"]' ).change( function(){
        var id = $( this ).parents('.product-cart-list') // родитель инпута и div-ов с суммой;
        var count  = parseInt($( this ).val()); 
        var price  = parseInt(id.find('.price span').text());
        var weight = parseInt(id.find('.weight span').text());
 
        id.find(' .total_price span' ).html( count * price );
        id.find(' .total_weight span' ).html( count * weight );
});
PS
Спасибо за помощь Андрею)
Aleksandr Suslov
05 января 2018, 13:13
modx.pro
2
2 036
0

pdoPage+pdoResource, как определить в &tpl первую/последнюю запись на странице?

Вывожу на странице список ресурсов используя pdoPage+pdoResource.

Смысл такой, что &limit у меня должен быть четным и я должен оборачивать в результаты парами.
К примеру если у меня &limit=`12`, то у меня на каждой странице должно быть 6 пар, то есть 6 в которых будет по 2 результата. Как я понял, это можно сделать через &tplFirst, &tplLast, &tplOdd и т.п., но это кощунство, шаблон каждого результата достаточно велик, это 4 чанка на 99,9% одинаковых, отличия будут в отрытом/закрытом div. Если что-то надо подправить в шаблоне вывода, править придется во всех четырех!

По этому хотел вот узнать, может есть какие то плейсхолдеры, которые можно использовать в чанке-шаблоне? В принципе по [[+idx]] я могу понять четный или нет, но не могу понять, как в чанке определить, является ли данный шаблон первым или последним выводом на странице? Конечно если знать заранее &limit, можно высчитать…

gloobus
27 ноября 2017, 19:52
modx.pro
2
1 358
0

Fenom вместо getImageList MIGx

Есть обработка MIGx полей через Fenom с условиями:
{set $rows = json_decode($_modx->resource.tv_name, true)}
{foreach $rows as $_list $row}
	{if $_last==1}
		'какойто коТ'
	{/if}
{/foreach}
Все замечательно работает, но если мне к примеру помимо _last нужны поля idx, _alt, _first и прочее, как быть в таком случае? Неужели без getImageList все же не обойтись?

Решение
{set $rows = json_decode($_modx->resource.migx_tv, true)}
{set $idx = 0}
{foreach $rows as $idxArr => $row}
	{set $row['idx'] = $idx++} {* idx от созданной переменной с инкриментом*}
	{set $row['idxForeach'] = $row@index} {* idx от foreach*}
	{*set $idxMIGX = $row['MIGX_id']*} {* idx от MIGX*}
	{if $row@first} 
		{set $row['_first'] = 'first item'}
	{/if}
	{if $row@last} 
		{set $row['_last'] = 'last item'}
	{/if}
	{if !($idx % 2)}
		{set $row['_alt'] = 'odd item'}
	{/if}
	{$row | print_r}
{/foreach}
Владислав
29 сентября 2017, 15:22
modx.pro
8
8 564
-2

Редирект URL со слэшем в конце на без слэша

Это не вопрос, а решение.
Ниже код плагина, который решает задачу: редирект URL со слэшем в конце на URL без слэша в конце.
Гугл/яндекс в течение часа дал ответ на обратную задачу (редирект без слэша в конце на со слэшем).
Делюсь доработкой с надеждой, что это вылезет в топ и поможет сохранить время следуюшим поколениям :)
Также сделаны настройки по пунктам 1-6 отсюда.

Плагин настраивается на событие OnLoadWebDocument:

<?php
if ($modx->event->name == 'OnLoadWebDocument') {
  $request = $_SERVER['REQUEST_URI'];
  $params = '';
  if (strpos($request, '?') !== false) {
  	list($request, $params) = explode('?', $request);
  }
  $uri = $request;
  if(!empty($uri) && strpos($uri, '.') === false && substr($uri, -1, 1) == '/') {
    $uri = substr($uri, 0, -1);
    if (!empty($params)) {
      $uri .= '?' . $params;
    }
    $modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
  }
}
Мартин Очоа
18 июля 2017, 21:19
modx.pro
5
5 385
+1

tvSuperSelect фильтрация по двум и более TV

tvSuperSelect фильтрация ресурсов по двум и более TV с логическим «И»

Всем привет!
Встала задача сделать выборку ресурсов по нескольким TV полям типа tvSuperSelect с логическим «И»
bratskiy
31 мая 2017, 13:42
modx.pro
4
1 997
+4

pdoresources запрос по датам

Привет, помогите пожалуйста, составить запрос в pdoResources, через where.

Есть две ТВ, datestart и dateend
А также есть определённая дата в таком формате: 2016-12-01

Нужно составить выборку, чтобы данная дата попадала в диапазон дат этих ТВ.
Павел
02 декабря 2016, 11:33
modx.pro
6
1 414
0

Fenom + pdoMenu и динамический parent

Добрый вечер,

можете подсказать, почему не работает такой вывод?

<ul class="subcategories">
{$_modx->runSnippet('!pdoMenu', [
'parents' 	=> '{if $_modx->resource.parent|in:[10,20,30]}{$_modx->resource.parent}{else}{$_modx->resource.id}{/if}',
'showHidden' 	=> '0',
'level' 	=> '1',
'tplOuter' 	=> '@INLINE {$wrapper}',
'tpl' 		=> '@INLINE <li{$classes}><a href="{$link}" {$attributes}>{$menutitle}</a>{$wrapper}</li>',
'showLog' => 0
])}
</ul>
но так работает:

<ul class="subcategories">
[[!pdoMenu?
&parents=`{if $_modx->resource.parent|in:[23,27,24,26,25,29,30,28]}{$_modx->resource.parent}{else}{$_modx->resource.id}{/if}`
&showHidden=`0`
&level=`1`
&tplOuter=`@INLINE [[+wrapper]]`
&tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`
]]
</ul>
Andrei D.
31 октября 2016, 17:57
modx.pro
6
6 354
+1