maxsite / cms

MaxSite CMS
https://max-3000.com/
GNU General Public License v3.0
143 stars 64 forks source link

Картинки для соц сетей #51

Closed vovansrnd closed 9 years ago

vovansrnd commented 9 years ago

Я не совсем понял, куда тут хотелки писать. Я так понял, что пулл рекваест уже для готовых предложений. В общем, пишу сюда.

Соц сети берут картинку и из каждой страницы: <meta property="og:image" content="http://****">

Хотелось бы, чтобы сам движок брал картинку, если она есть, из "Изображение записи" (image_for_page).

Если "og:image" не заполнено, или заполнено неправильно, когда посетители пользуются соц кнопками. получается какой-то ужас :( хотелось бы увидеть это в 0.90, по возможности.

maxsite commented 9 years ago

А есть ссылка на документацию?

vovansrnd commented 9 years ago

Ну, пока для примера - http://artemblog.ru/articles/seo/social-meta-tags.html

Чуть позже более официальное что-то поищу.

vovansrnd commented 9 years ago

Может быть это?

https://developers.facebook.com/docs/sharing/webmasters

В общем, суть такая. Фейсбук, ВКонтакти и прочие, если размещать там ссылку, выводят бог знает что. Картинку в лучшем случае случайную со страницы. Но можно в хидере конкретно показать, что указывать. И тогда соц сети ведут себя предсказуемо.

И это очень важно. Приятно в соц сетях делиться ссылками, которые при добавлении выглядят акуратно - соответствующая заголовок, картинка, описание. Но даже со своего сайта лишний раз в соц сетях ссылки не даю, так как это выглядит убого. Что уж о посетителях сайта говорить тогда...

Ну, если даже не к каждой записи свою выводить, то хотя бы чтобы можно было в админке указать, какую общую для сочц сетей выводить.

Сейчас у меня при добавлении ссылок соц сети их парсят так: vk: fb:

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

vimruler commented 9 years ago

Нужный код описан здесь - Как сделать чтобы анонс записи расшаривался в социальные сети с изображением?

maxsite commented 9 years ago

Прежде чем такое внедрять, я бы хотел увидеть ссылки, что Open Graph поддерживается тем же твиттером, фейсбуком и т.п. Потому что внедрить-то можно, но если это единичные задачи, то стрелять нужно из другой пушки. Если же все крупные соцсети поддерживают протокол, то и вопрос ставится уже совсем по другому.

vovansrnd commented 9 years ago

Ну так в том-то и дело, что Open Graph подерживается многими. Чтобы им как-то с картинкой и описанием предоставлять ссылку, им нужно либо распарсить по шаблону страницу, и там может оказаться всё что угодно, либо работать по определённому (с определённым?)) API. Open Graph и выступает на данный момент в роли такого.

Вот фейсбук показывает, что да как, для вебмастеров:

https://developers.facebook.com/docs/sharing/webmasters

Твитер:

https://dev.twitter.com/cards/getting-started#opengraph

G+:

https://developers.google.com/+/web/snippet/article-rendering

Вот Яндекс описывает этот стандарт для видео:

https://help.yandex.ru/webmaster/video/open-graph-markup.xml

vk точно поддерживает, всё работает, проверено.

Немного на Хабре про него:

http://habrahabr.ru/company/yandex/blog/211638/

Цитата:

Open Graph (OG) — это самый распространенный и простой словарь. Сейчас Open Graph чаще всего используют для того, чтобы публикуемые ссылки с сайтов были расширенными, красивыми и понятными. С разметкой OG ссылки будут так показываться по всех популярных соцсетях.

Помимо Facebook разметку Open Graph распознают также Вконтакте, Google+, Twitter, LinkedIn, Pinterest и другие.

Ну и - http://ogp.me/

skull3d commented 9 years ago

Хорошее предложение, в любом случае можно реализовать в виде админской опции (как с cannonical), и каждый сам решит - надо ему это или нет.

vovansrnd commented 9 years ago

Ну да, хорошо бы это сделать отключаемым, но, думаю, чтука важная и должна быть частью движка, а не плагином. И даже всегда включенная она не помешает. Даже, думаю, лучше пусть будет по умолчанию включенной, так как далеко не все понимают, что это такое, а фишка очень полезная и удобная.

maxsite commented 9 years ago

Да, интересно... Такой момент. Какие-то базовые данные мы сможем сделать и по-умолчанию. Например og:title, og:url, og:image и og:description. Но как поступить для тех случаев, если страница должна иметь какой-то свой набор og-свойств? Например type: http://ogp.me/#types

То есть получается, что свойства og должны как-то заполняться либо отдельно для каждой страницы, либо автоматом (то есть ограниченный объём). Какие мысли на сей счёт?

vovansrnd commented 9 years ago

https://developers.facebook.com/docs/reference/opengraph/

ну, можно, думаю, сделать поумолчанию какой-то. Article, например. Это или в админке чтобы выбиралось, или просто по уолчанию. А уже на странице из выподающего списка в "дополнительных МАТА" можно было выбрать, если публикуется что-то специфическое.

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

Ну, это в идеале. А так, пока, хоть бы базовую реализацию ) хороший стимул обновляться на 0.90 ))

maxsite commented 9 years ago

Автоматом можно сделать og:title, og:url, og:image и og:description. Всё остальное тогда уже на откуп вебмастера.

vovansrnd commented 9 years ago

Большое спасибо, бекпортировал измения в основной сайт )) Всё работает, как ожидалось )

с нетерпением жду 0,90

осталось написать скрипт, который перегонит все первые картинки в "Изображение записи", ибо в блоге уже 2.5к страниц почти, руками нереально ))

vovansrnd commented 9 years ago

Да, забыл сказать, что я чуть изменил всё же логику. При проверке, есть ли изображение у записи, я добавил else и вывод картинки по умолчанию

vovansrnd commented 9 years ago

В общем, написал скрипт для заполнения всех "Изображение записи".

В двух словах:

находим первую картинку в каждой записи, вставляем в мета-поле "Изображение записи". Наслаждаемся рабочей реализацией Open Graph.

#!/bin/bash

DB='maxnew' # имя базы данных
MYSQLQ='--uroot -p3123123123' #логин/пароль

>LOG # создайм файл с логом событий

mysql $MYSQLQ $DB -e "DELETE FROM mso_meta WHERE meta_key='image_for_page'" # удалям все записи с "Изображение записи"

count_rows=`mysql $MYSQLQ --raw --batch -s $DB -e "SELECT COUNT(*) FROM mso_page;"` # подсчитываем кол-во записей в блоге

for i in $(seq 0 $count_rows)
do
echo "id $i" >> LOG # вносим в лог номер записи
img=`mysql $MYSQLQ $DB -e "SELECT page_content FROM mso_page WHERE page_id="$i"" | \
grep -oP "(?<=src=\")[^\"]+(?=\")" | head -n 1` # извлекаем первую картинку записи
echo $img >> LOG # заносим в лог URL картинки
if [ "$img" ] ; then # если картинка в записе нашлась, вставляем её в нужную таблицу
    mysql $MYSQLQ $DB -e "INSERT mso_meta SET \
                   meta_key='image_for_page',meta_value='$img',meta_id_obj=$i,\
                   meta_table='page',meta_desc='',meta_slug='',meta_menu_order='0'"
fi

done
exit 0

Думаю, что понятно, что тестироват надо на резервной базе и комментировать ненужные части для отладки.

maxsite commented 9 years ago

По-моему проще использовать mso_get_first_image_url().

vovansrnd commented 9 years ago

Макс, мне проще то, что я знаю ) рнр я не знаю и ещё нужно с функцией разбираться. И с работой с бд. А тут чистый баш и сускул, ничего сложного. И это разрвая операция. Написал скриптик, выполнил и забыл. Или имеется ввиду, каждый раз при открытии страницы? я побоялся за нагрузку на хостинг. С моим объёмом данных и посещаемостью я не раз упирался в это. Нафик. Лучше раз скрипт выполнить и забыть.

maxsite commented 9 years ago

Там нет обращений к БД. Обычная регулярка для текста.

vimruler commented 9 years ago

Может надо было вынести в type_foreach или кастом, но в рамках default-шаблона? Всё таки логика подбора изображения и текстов может варьироваться от задачи к задаче.

vovansrnd commented 9 years ago

Мне кажется, что это всё равно нагрузку на хостинг добавит.

vovansrnd commented 9 years ago

тьфу, блин. Случайно коммент нажал.

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

Но вот относительно получения картинок под разные задачи... хотелось бы вывод симулар пост с картинками и без, например как тут http://floppygames.ru/page/castlevania-legacy-of-darkness Несложно де это в движке реализовать, а не через кривой плагин

maxsite commented 9 years ago

Это и так на уровне шаблона всё делается. Если нужно что-то своё добавить, то меняется template.php. Я как раз и хочу, чтобы все перестали ориентироваться на default-шаблон.

Что такое «симулар пост»?

vovansrnd commented 9 years ago

Похожие статьи. Разве не тае это в МаксЦМС называется? Или это название плагина? Я просто сейчас в поездке, не могу точно сказать. Факт в том, что движок может выводить "похожие статьи", а просто ссылки или ссылки с картиками... вот так бы это сделать... проще простым пользователям. И блог веселее выглядит с картинками.

maxsite commented 9 years ago

Да в общем-то это type_foreach-файл page-other-pages-out.php. В старой версии MaxSite CMS он есть.