[MIGX] - Большой и страшный. UTM метки для MODX.

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

Вот уж давненько я не писал вам о MIGX, соскучились небось? Можете не отвечать, знаю, что соскучились. Хотя и мои заметки с каждым разом получают всё меньше и меньше плюсов. Скажу вам по секрету: я подозреваю, что некто Василий Н. (Пальцем не буду показывать, но вот его профиль) подкручивает себе плюсы, мои также он присваивает себе и вообще он работает на Госдеп США. Ну или это просто паранойя.

Зачем?



Допустим у вас задача сделать так, чтобы у вас на сайте выводился разный контент в зависимости от GET параметра и вам лень устанавливать целый компонент для этого. Компонент это хорошо, но мы же извращенцы, давайте делать всё на MIGX? Даже MODX не нужен, «Ставьте лайки кто хочет MIGX CMS»


Должно получится нечто подобное:



Этот способ хорош тем, что у нас будет возможность создавать сколько угодно полей.

Как?
Или как написал бы Артем Зернов

КАК???



Если вы еще не ознакомились с предыдущими уроками, то советую, дабы я не повторялся. Нам нужно перейти на страницу компонента MIGX и создать конфигурацию.

Всё, что не указано мной, пропускайте!

  • Вкладка Settings
    • Nameutm
    • Замена «Добавить элемент»Добавить метку
    • Form CaptionДобавить/редактировать метку
    • Window TitleДобавить/редактировать метку

  • Вкладка Formtabs
    • Fields — Создаем 1 вкладку и в поле Fields создадим несколько полей
      1. Сама метка
        • Fieldnameutm
        • CaptionUTM метка
      2. Заголовок страницы
        • Fieldnametitle
        • CaptionЗаголовок страницы
      3. Заголовок H1
        • Fieldnamepagetitle
        • CaptionЗаголовок H1


  • Вкладка Columns
    • Поле Columns
      1. Ссылка (нужна будет для того, чтобы менеджер по клику мог увидеть как будет выглядеть страница, это удобно)
        • Вкладка Column
          • HeaderСсылка
          • Fieldlink
        • Вкладка Renderer
          • Rendererthis.renderChunk
          • renderChunk template<a href="[[~[[#GET.id]]]]?utm=[[+utm]]" target="_blank">Посмотреть</a>

      2. Метка
        • Вкладка Column
          • HeaderМетка УТП
          • Fieldutm
        • Вкладка Cell Editor
          • Editorthis.textEditor

      3. Заголовок страницы
        • Вкладка Column
          • HeaderЗаголовок страницы
          • Fieldtitle
        • Вкладка Cell Editor
          • Editorthis.textEditor

      4. Заголовок H1
        • Вкладка Column
          • HeaderЗаголовок H1
          • Fieldpagetitle
        • Вкладка Cell Editor
          • Editorthis.textEditor


Идём и создаем TV utm с типом ввода migx, в поле Конфигурации пишем название нашей конфигурации, т.е. utm, назначаем нужные шаблоны и открываем на редактирование ресурс, ну или же его создаем.

Сниппет utm


Создайте сниппет и укажите название utm с таким кодом:

<?php
$utm_point = $modx->stripTags($_GET['utm']);
$migx = $modx->resource->getTVValue('utm');
$array = $modx->fromJSON($migx);

if(!empty($input)) {
    foreach($array as $utm) {
        if($utm['utm'] == $utm_point && !empty($utm[$input])) return $utm[$input];
    }
}
return;


Как вывести?


Очень просто, вот примеры:

// Синтаксис MODX

<head>
    <title>[[!utm:default=`Заголовок страницы по умолчанию`? &input=`title`]]</title>
</head>

<body>
    <h1>[[!utm:default=`Заголовок H1 по умолчанию`? &input=`pagetitle`]]</h1>
</body>

// Fenom

<head>
    <title>{('title' | utm) ?: 'Заголовок страницы по умолчанию'}</title>
</head>

<body>
    <h1>{('pagetitle' | utm) ?: 'Заголовок H1 по умолчанию'}</h1>
</body>


Вот таким нехитрым способом можно добиться нашей цели. Если вы еще не поняли, то мы можем создать сколько угодно полей, изображения, целые контенты, описания и вообще всю страницу менять в зависимости от utm метки. Единственный минус это то, что у MIGX не реализована пагинация у TV.

Всем спасибо за внимание, а мне потому что я Баха?

Сайт с документацией
Репозиторий на GitHub
☕ Угостить чашкой кофе
Баха Волков
24 февраля 2019, 18:02
modx.pro
8
2 724
+32

Комментарии: 26

Сергей
24 февраля 2019, 18:48
0
Поблагодарил, спасибо!
Это сообщение было удалено
    Это сообщение было удалено
    Это сообщение было удалено
      Это сообщение было удалено
        Это сообщение было удалено
          Это сообщение было удалено
            Это сообщение было удалено
              Это сообщение было удалено
                Это сообщение было удалено
                  Это сообщение было удалено
                    Это сообщение было удалено
        Василий Наумкин
        25 февраля 2019, 13:41
        +1
        Чат в телеграме опять забыли закрыть и флудеры разбежались.

        Всё потёр, впредь прошу не сорить.
          Это сообщение было удалено
            Василий Наумкин
            25 февраля 2019, 15:41
            0
            Вставлять километровые картинки тоже не нужно. Комментарии удалены не для того, чтобы ты вставил обратно их же, но картинками.

            Я понятия не имею, что за чушь вы тут несли про скручивание просмотров и воровство лайков.
            Если это реальная проблема — то её нужно обрисовать мне, как я и попросил. Если это такая тонкая шутка — то я не в теме, и лучше подобное оставить у себя в чатике.

            Прошу уточнить, к заметкам это тоже относиться? Ведь в моих заметках 10-20% «мусора»
            Лично я смогу обойтись без смайликов и шутеек в тексте, но ты уж сам решай.
          Роман
          29 апреля 2019, 10:17
          0
          Статья шикарна, спасибо.
          Вопрос, кнопка «Посмотреть» меня не ведет на страницу joxi.ru/n2Ybja3ib7805A — так и должны быть? Сделал как указано выше.
            Баха Волков
            29 апреля 2019, 21:01
            0
            Пожалуйста, Роман!

            Вопрос, кнопка «Посмотреть» меня не ведет на страницу joxi.ru/n2Ybja3ib7805A — так и должны быть?
            А pdoTools или fastField установлен?
              Роман
              29 апреля 2019, 21:05
              0
              Установил fastField все заработало как нужно. Спасибо!
                Баха Волков
                29 апреля 2019, 21:07
                0
                Пожалуйста)
                  Роман
                  22 июля 2019, 14:16
                  0
                  Баха, подскажи пожалуйста, как можно сделать, что бы по умолчанию использовалось нужное мне поле с первого id моих UTM меток?

                  Что бы было более понятно про что речь:
                  [[!utm:default=`[[+title:id=1]]`? &input=`title`]]
                    Баха Волков
                    22 июля 2019, 14:27
                    0
                    Пишу с телефона, так что проверь сам. Как-то так должно быть, будет выводится из первого элемента

                    <?php
                    $utm_point = $modx->stripTags($_GET['utm']);
                    $migx = $modx->resource->getTVValue('utm');
                    $array = $modx->fromJSON($migx);
                    $output = '';
                    
                    if(!empty($input)) {
                        foreach($array as $utm) {
                            if($utm['utm'] == $utm_point && !empty($utm[$input])) $output = $utm[$input];
                        }
                    }
                    
                    return $output ?: $array[0][$input];
                      Роман
                      22 июля 2019, 15:40
                      0
                      Не, к сожалению не робит правильно.

                      Есть ли вариант, что бы не править сам снипет, а указывать в вызове какое поле мне нужно? Страницы разные, и ситуации разные.
                        Роман
                        24 июля 2019, 12:55
                        0
                        Баха, еще ошибка спиться:

                        core/cache/includes/elements/modsnippet/41.include.cache.php : 7) PHP warning: Invalid argument supplied for foreach()
                        
                        // в файле:
                        <?php
                        $utm_point = $modx->stripTags($_GET['utm']);
                        $migx = $modx->resource->getTVValue('utm');
                        $array = $modx->fromJSON($migx);
                        
                        if(!empty($input)) {
                            foreach($array as $utm) {
                                if($utm['utm'] == $utm_point && !empty($utm[$input])) return $utm[$input];
                            }
                        }
                        return;
                        return;
                          Баха Волков
                          24 июля 2019, 13:02
                          +1
                          <?php
                          $utm_point = $modx->stripTags($_GET['utm']);
                          $migx = $modx->resource->getTVValue('utm');
                          $array = $modx->fromJSON($migx);
                          $output = '';
                          
                          if(!empty($input) && is_array($array)) {
                              foreach($array as $utm) {
                                  if($utm['utm'] == $utm_point && !empty($utm[$input])) $output = $utm[$input];
                              }
                          
                              $output = $output ?: $array[0][$default]; // Вот тут происходит выборка по умолчанию
                          }
                          
                          return $output;

                          Вызывай так:

                          [[!utm? &input=`title` &default=`another_field`]]

                          Должно браться с первого элемента (не с первого MIGX_id), если хочешь еще и id указать, то перепиши
                            Роман
                            24 июля 2019, 14:16
                            0
                            Круто, все работает. Спасибо большое!
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            26