Микроразметка Schema.org для InstantCms

#16 15 июля 2012 в 00:38
Продолжаю развивать тему расширенного сниппета для статей/блогов сайта в ПС.
Пока не получается реализовать звёздный рейтинг, а жаль. Но я ведь и не программист.

Решил чуток отдохнуть от рейтингов и привязать профиль пользователя к Google+.
Зачем это нужно? – спросят многие. По сути это передача забот по охране авторских прав на плечи Google.
И добавляет фото автора статьи к сниппету в выдаче Google.

Решить эту задумку оказалось гораздо проще, чем в Joomla. И так, что же я делал:
В конструкторе форм создал текстовое поле – Мой профиль в Google+.
На сайте в настройках профиля добавил соответствующую ссылку и сохранил профиль.
Посмотрел результат сохранения и заплакал. Ссылка получила вид
mysayt/user/hobby/ plus.google.com/u/0/айди пользователя/posts
Пошёл искать, где же формируется сей ужас — //mysayt/user/hobby/.
Нашёл в конструкторе форм mysayt/components/users/includes/ userforms.php, в районе 93 строки:
  1. $default = cmsPage::getMetaSearchLink('/users/hobby/', $default);
И заменил на:
  1. $default = '<a rel="me" target="_blank" href="'.$default.'">'.$default.'</a>';
То есть для подключения профиля Google+ нужно ввести ссылку на профиль и в самом профиле Google+ указать ссылку на ваш сайт. Теперь в выдаче Google(точно) для некоторых, популярных, статей и блогов будет присутствовать фото автора статьи. Что будет повышать уровень доверия пользователей к вашему сайту. А, следовательно, влиять на все остальные показатели сайта.

Данное решение не элегантное и я не знаю как оно повлияет на безопасность сайта, но оно работает.

В принципе всё, осталось решить одну глобальную проблему – как объяснить пользователям сайта, что это за поле и чего с ним делать. Но это уже совсем другая история.
#17 19 августа 2012 в 16:48
Всем доброго времени суток.
Я решил продолжить развитие темы, “Микроразметка Schema.org для InstantCms”. И сегодня я расскажу, как реализовать “Хлебные крошки” (Breadcrumb, Глубиномер) в выдаче Поисковых систем. К сожалению это будет небольшой хак ядра.

Для внесения правок нам понадобится только один файл — ваш сайт/core/classes/page.class.php. В нём находим функцию “Глубиномера”. В чистом, не изменённом, файле она находится на строках с 252 по 273.

Собственно теперь мы готовы произвести “Микроразметку хлебных крошек”. Так как на сайте Schema.org мне не удалось найти вразумительных правил для разметки Breadcrumb, я пошёл на сайт data-vocabulary.org. В совокупности эти два сайта открывают практически безграничные возможности для работы с “Микроразметкой сайта”.

И так, на 263 строке размещён <div class="pathway">. Добавим сюда атрибуты, объявляющие о начале и типе разметки — itemscope itemtype="http://data-vocabulary.org/Breadcrumb".

Далее на 265 строке расставляем атрибуты — itemprop="url"(адрес цепочки) и <span itemprop="title">(Название цепочки). А на 267 строке ставим атрибут <span itemprop="child">(переход к следующему элементу в цепочке).

Вот и вся “Микроразметка для хлебных крошек(Breadcrumb)”.
В итоге у меня получился такой код:
  1.  
  2.  
  3. /**
  4.  * Печатает глубиномер
  5.  * @param string $separator
  6.  */
  7. public function printPathway($separator='&#8594;'){
  8.  
  9. $inCore = cmsCore::getInstance();
  10. $inConf = cmsConfig::getInstance();
  11.  
  12. //Проверяем, на главной мы или нет
  13. if (($inCore->menuId()==1 && !$inConf->index_pw) || !$inConf->show_pw) { return false; }
  14.  
  15. if ($inConf->short_pw){ unset($this->pathway[sizeof($this->pathway)-1]); }
  16.  
  17. if (is_array($this->pathway)){
  18. echo '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="pathway">';
  19. foreach($this->pathway as $key => $value){
  20. echo '<a href="'.$this->pathway[$key]['link'].'" class="pathwaylink" itemprop="url">'.'<span itemprop="title">'.$this->pathway[$key]['title'].'</span></a> ';
  21. if ($key<sizeof($this->pathway)-1) {
  22. echo '<span itemprop="child">'.$separator.'</span>';
  23. }
  24. }
  25. echo '</div>';
  26. }
  27.  
  28. }
  29.  
  30.  
Результат проверки на www.google.com/webmasters/tools/richsnippets
#18 20 августа 2012 в 15:24
Если вдруг чего сразу не получилось, то стоит проверить не прописан ли код глубиномера в шаблоне.
Если он там есть, то вносите правки туда — по аналогии.
#19 13 ноября 2012 в 11:01

То есть для подключения профиля Google+ нужно ввести ссылку на профиль

AlexSF
Подскажите, какого вида должна быть ссылка на профиль?
  1. https://plus.google.com/u/0/111517844453900713025
Как проверить работоспособность?
#20 13 ноября 2012 в 16:00
А как для рецептов под гугл и яндекс сделать снипет?!
#21 13 ноября 2012 в 20:52


То есть для подключения профиля Google+ нужно ввести ссылку на профиль

AlexSF
Подскажите, какого вида должна быть ссылка на профиль?
  1. https://plus.google.com/u/0/111517844453900713025
Как проверить работоспособность?

sotastroy
Да ссыль должна быть такой — plus.google.com/u/0/105434015661921271662/about

При проверке на www.google.com/webmasters/tools/richsnippets получится примерно так:
#23 14 ноября 2012 в 15:36

Нашёл в конструкторе форм mysayt/components/users/includes/ userforms.php, в районе 93 строки:

AlexSF
а на 1.10 где менять не подскажете?
Нашел где, но вот как вопрос
в admin/components/forms/backend.php

Строка выглядит так

<td><input name="text_link_prefix" type="text" size="25" value="<?php echo (@$field['config']['text_link_prefix']? $field['config']['text_link_prefix']: '/users/hobby/'); ?>" /></td>

убирал это хоби но ничего не выходит.
#24 14 ноября 2012 в 23:17


Нашёл в конструкторе форм mysayt/components/users/includes/ userforms.php, в районе 93 строки:

AlexSF
а на 1.10 где менять не подскажете?

Искус

По вашей просьбе сделал небольшой хак компонента — Пользователи. Теперь всё работает без конструктора форм.
Начал с правки файла шаблон/components/com_users_edit_profile.tpl. Тут создал поле для ввода, по образу и
подобию соседних полей.

  1.  
  2. <div id="contacts">
  3. <table width="100%" border="0" cellspacing="0" cellpadding="5">
  4. <tr>
  5. <td width="300" valign="top">
  6. <strong>E-mail:</strong><br />
  7. <span class="usr_edithint">{$LANG.REALY_ADRESS_EMAIL}</span>
  8. </td>
  9. <td valign="top">
  10. <input name="email" type="text" class="text-input" id="email" style="width:300px" value="{$usr.email}"/>
  11. </td>
  12. </tr>
  13. <tr>
  14. <td valign="top"><strong>{$LANG.NUMBER_ICQ} :</strong></td>
  15. <td valign="top"><input name="icq" class="text-input" type="text" id="icq" style="width:300px" value="{$usr.icq}"/></td>
  16. </tr>
  17. <tr>
  18. <td valign="top"><strong>{$LANG.GOOGLE_PLUS} :</strong><br /><span class="usr_edithint">{$LANG.GOOGLE_PLUS_TEXT}</span></td>
  19. <td valign="top"><input name="g_plus" class="text-input" type="text" id="g_plus" style="width:300px" value="{$usr.g_plus}"/></td>
  20. </tr>
  21. </table>
  22. </div>
  23.  
  24.  
Далее занялся определением места где выводить информацию. Для этого правил файл шаблон/components/com_users_profile.tpl

  1.  
  2. {if $usr.showicq && $usr.icq}
  3. <div class="field">
  4. <div class="title">ICQ:</div>
  5. <div class="value">{$usr.icq}</div>
  6. </div>
  7. {/if}
  8.  
  9. {if $usr.g_plus}
  10. <div class="field">
  11. <div class="title">{$LANG.GOOGLE_PLUS} :</div>
  12. <div class="value"><a href="https://plus.google.com/u/0/{$usr.g_plus}/about" rel="me" target="_blank">{$LANG.GOOGLE_PLUS_PAGE}</a></div>
  13. </div>
  14. {/if}
  15.  
Дальше пошёл в языковой файл languages/ru/components/users.php и добавил следующие константы:

  1.  
  2. $_LANG['GOOGLE_PLUS'] ='Google+';
  3. $_LANG['GOOGLE_PLUS_PAGE'] ='Моя страница Google+';
  4. $_LANG['GOOGLE_PLUS_TEXT'] ='Вводите только id страницы. <br />Например: 105434015661921271677';
  5.  
  6.  
Далее выполнил запрос в таблице cms_user_profiles БД и добавил поле g_plus

  1. ALTER TABLE cms_user_profiles ADD g_plus VARCHAR(30) NOT NULL;
Теперь настала пора настроить запись первым правленым файлом в БД и вытаскивать полученную инфу на страницу профиля. Для этого стал изучать файлы components/users/frontend.php и components/users/model.php

В components/users/frontend.php между 250 и 259 строками написал:
  1. $g_plus = cmsCore::request('g_plus', 'str');
далее в запрсе к БД, начинаеется он в районе 282 строки, добавил обращение к полю g_plus таблицы cms_user_profiles. В итоге получил следующий вид:
  1.  
  2. $sql = "UPDATE cms_user_profiles
  3. SET city = '$city',
  4. description = '$description',
  5. g_plus = '$g_plus',
  6. showmail='$showmail',
  7. showbirth='$showbirth',
  8. showicq='$showicq',
  9. allow_who='$allow_who',
  10. signature='$signature',
  11. signature_html='$signature_html',
  12. gender='$gender',
  13. formsdata='$formsdata',
  14. email_newmsg='$email_newmsg',
  15. cm_subscribe='$cm_subscribe'
  16. WHERE user_id = '$id'";
  17. $inDB->query($sql) ;
  18.  
  19.  
Далее в components/users/model.php на 229 строке начинается запрос к БД. В него я добавил p.g_plus,
. Получилось так(239 стр.):
  1. p.city, p.karma, p.imageurl, p.g_plus,
Также я поступил и с запросом начинающемся на 313 строке. p.g_plus, добавил в конец 327 строки.

В итоге я получил такую картину:


и поле для добавления:


Возможно есть и более элегантный вариант решения, НО Я НЕ ПРОГРАММИСТ, поэтому я его не знаю.
И в связи с этим прошу не очень сильно меня пинать.
#25 15 ноября 2012 в 01:02
Alex, у кодеров работы хватает, пока они не возьмутся :)
может у себя в блоге файлы выложишь :)
#26 15 ноября 2012 в 02:57


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

lezginka.ru

Выложил, но без блога instantcms.ru/users/files/download2691.html под InstantCMS 1.10
#27 15 ноября 2012 в 13:19
Спасибо за оперативность😊Нужно пробывать поставить.
#28 15 ноября 2012 в 15:39
AlexSF, Отлично. +
#29 12 декабря 2012 в 02:47

а на 1.10 где менять не подскажете?

По вашей просьбе сделал небольшой хак компонента

AlexSF

Подскажите пожалуйста, где менять без хака компонента. Не хотелось бы этого, проще ссылку вставить и заполнить поле для "пейсателей". Заранее спасибо.
#30 12 декабря 2012 в 04:01
AlexSF, а как подтвердить авторство?

а то при проверке не показывает аватар и пишет красным НЕ ПОДТЕРЖДЕНО
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.