К содержанию

Привязка постов к профилям авторов в соцсетях

Здравствуйте. Всех с наступившим. Прошу помощи в написании сниппета. Мне нужно для пользователя, автора текущего ресурса
$resource->get('createdby')
получить из таблицы modx_ha_user_services (таблица с данными пользователя HybridAuth) массив в виде (а лучше конечно сниппет, ибо мне это будет стоить минимум полмесяца разбирательства):
"Провайдер_1" => "Ссылка на профиль пользователя провайдера_1"
"Провайдер_2" => "Ссылка на профиль пользователя провайдера_2"
Я хочу, чтобы публикации (тикеты) пользователей привязывались к их профилям в соцсетях. Для этого необходимо в HTML подставлять ссылки на профили пользователей.
Насколько мне известно самый популярный механизм — привязка к профилю Google+ и Twitter.
Нужно, чтобы каждый ресурс принадлежал (был привязан) его автору, вот так:
<head>
...
<link rel="author" href="https://plus.google.com/user_id">
<meta property="twitter:creator" content="@user" />
...
</head>
У меня знакомые (которые пишут статейки) об этом беспокоятся, им хочется иметь какую-то защиту авторства, я считаю, что это правильно и хотел бы на своем сайте не ущемить права авторов. Ну вообще думаю пригодился бы такой сниппет блогам.
Виталий Барышников
Виталий Барышников
05 января 2016, 09:06
modx.pro
2 037
Реклама

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

Василий Наумкин
Василий Наумкин Администратор
05 января 2016, 12:11
Следите за руками:
[[!pdoResources?
	&class=`haUserService`
	&sortby=`id`
	&tpl=`@INLINE <p>{{+provider}} - {{+profileurl}}</p>`
	&where=`{"internalKey": [[!*createdby]]}`
	&showLog=`1`
]]
Чанк можно усложнить — вынести отдельно и расписать любые условия через Fenom.
    Виталий Барышников
    05 января 2016, 12:15
    Клёво. Я конечно тут ничего не понял пока, но из опыта — вы плохого не советуете. Спасибо.
      Виталий Барышников
      05 января 2016, 13:35
      а {if} в INLINE-чанке должен работать?
      Виталий Барышников
      05 января 2016, 13:20
      Мне нужно что-то (пишу на ломанном языке с акцентом) вроде такого:
      — сниппет metaCopyright
      <?php
      автор = $resource->get('createdby');
      $props = array();
      if (isset(профиль_автора_вGoogle+))
      {
      	$props[googleProfile] = профиль_автора_вGoogle+;
      }
      
      if (isset(профиль_автора_вTwitter))
      {
      	$props[twitterProfile] = профиль_автора_вTwitter;
      }
      
      return $modx->getChunk('metaCopyChunk', $props);
      — Чанк metaCopyChunk:
      <link rel="author" href="[[+googleProfile]]">
      <meta property="twitter:creator" content="[[+twitterProfile]]" />
      — Вызов в шаблоне:
      <head>
      ...
      <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
      <meta charset="UTF-8"/>
      <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
      
      [[metaCopyright]]
      ...
      </head>
      Не знаю понятно ли изложил. Через pdoResources я не понял как это можно сделать

        Виталий Барышников
        05 января 2016, 14:04
        Я при помощи комментария Василия использую такое решение:
        В шаблоне в head вызываю:
        [[!pdoResources?&class=`haUserService`&sortby=`id`&tpl=`metaCopyright`&where=`{"internalKey": [[!*createdby]]}`]]
        Чанк metaCopyright:
        {if $provider == 'Google'}<link rel="author" href="https://plus.google.com/[[+profileurl]]">{/if}
        {if $provider == 'Twitter'}<meta property="twitter:creator" content="@[[+profileurl:stripString=`http://twitter.com/`]]" />{/if}
        С помощью +profileurl:stripString я вырезаю адрес с http //twitter.com/, т.к. в этом теге должна быть строка вида @username. Если есть более красивое решение прошу поделиться.
          Егор Довгалюк
          Егор Довгалюк Старожил
          09 января 2016, 11:25
          В моих руках этот код абсолютно бездушный и не выводит на экран ровным счетом ничего, подскажите, что делаю не так?

          [[!pdoResources?
          &class=`haUserService`
          &sortby=`id`
          &tpl=`@INLINE {{+provider}} — {{+profileurl}}`
          &where=`{«internalKey»: [[!*createdby]]}`
          &showLog=`1`
          ]]
            Василий Наумкин
            Василий Наумкин Администратор
            09 января 2016, 11:42
            [[!*createdby]]
            Это создатель текущей страницы и не факт, что он заходил через соцсети.

            Если нужен определённый юзер, то нужно указать его id, числом. А если нужен текущий юзер, авторизованный в системе, то нужно использовать вот такой плейсхолдер:
            &where=`{"internalKey": [[!+modx.user.id]]}`

            Ну а для оформления кода у нас на сайте нужно использовать тег code:
            <code></code>
            Егор Довгалюк
            Егор Довгалюк Старожил
            09 января 2016, 13:55
            Замечание принято.

            Код ожил и теперь выводит на экран адреса всех пользователей которых знает. Это будет доска отзывов, и я хочу чтобы имя отправившего отзыв было обернуто в ссылку на его страницу, но не знаю за, что зацепиться. Как соотнести url странички и пользователя отправившего комментарий?

            И еще вопрос как указать ID пользователя числом, куда это нужно подставлять?
              Егор Довгалюк
              Егор Довгалюк Старожил
              09 января 2016, 14:11
              Если я правильно понимаю все дальнейшее взаимодействие происходит через
              &where=`{"JSON ключ": [[его значение]]}`
              В таком случае, вывод пользователя с id=15 будет выглядеть так
              &where=`{"id": 15}`
              ?
                Егор Довгалюк
                Егор Довгалюк Старожил
                09 января 2016, 14:38
                Спасибо Василию, все получилось, разобрался. Ура!

                [[!pdoResources?
                &class=`haUserService`
                &depth=`0`
                &sortby=`id`
                &tpl=`@INLINE {{+provider}} — {{+profileurl}}`
                &where=`{"identifier":[[+username]]}`
                &showLog=`1`
                ]]
                  Василий Наумкин
                  Василий Наумкин Администратор
                  09 января 2016, 14:49
                  На будущее — желательно нажимать ссылку «ответить» под комментарием, чтобы на него ответить. Тогда автору комментария придёт об этом уведомление.

                  А ты пуляешь все комментарии в корень ветки. Это и выглядит не очень, и я никаких уведомлений о твоём вопросе не получал.

                  P.S. Всё твои ответы перенёс повыше.
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  11