Социальные плагины

Плагины социальных комментариев доступны в каталоге!!!

В каталоге размещены два новых плагина – плагин интеграции с социальными сетями и плагин гостевых комментариев с авторизацией через соц.сети. Оба этих плагина решено было сделать с защитой ioncube. Знаю, противников ионкуба в сообществе достаточно, но в этом случае шаг обоснован.
Для обоих плагинов была разработана оригинальная расширяемая библиотека взаимодействия Альто с социальными сетями и код только этой библиотеки защищён ioncube, остальные файлы плагина открыты и доступны для чтения и модификаций. Кроме того, интерфейс библиотеки открыт и методика добавления других социальных сетей к плагинам описана в файле manual/Example.class.php.

Плагин интеграции

посмотреть демо версию

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

Если про плагин интеграции я писал, то про плагин гостевых комментариев нужно упомянуть отдельно. Этот плагин, кстати, хоть и будет защищен ионкубом, но будет распространятся бесплатно.

Плагин гостевых комментариев

посмотреть демо версию

В нем доступны те же социальные сети что и в плагине интеграции (кроме твиттера)
Плагин позволяет оставлять комментарии к топикам без регистрации, но через авторизации в какой-либо соц.сети или только с указанием email. Плагин имеет админку и все его параметры указать можно без ковыряния в файлах CMS, то есть можно выбрать либо один из режимов работы плагина соц.сети/email, либо включить оба режима. Общий порядок работы с этим плагином такой:
В топике пользователь при желании оставить комментарий просто выбирает способ которым он это сделает.

Похожие статьи


52 комментария

+3
УРА!!! (простите за капслок)
+1
Спасибо за бесплатный плагин. С соц. сетями ценник на мой взгляд завышен.
С «Гостевыми комментариями» почему то после выключения плагина и повторного включения приключается следующая беда
SQL Error: Duplicate entry '0B8uAORUAmrIObE9QZ1U5QW8xakE' for key 'user_login' at /var/www/iqtrader/data/www/iqtraders.ru/engine/classes/modules/database/Database.class.php line 291 --- Array ( [code] => 1062 [message] => Duplicate entry '0B8uAORUAmrIObE9QZ1U5QW8xakE' for key 'user_login' [query] => -- ---------------------------------------------------------------------------------------------- -- install.sql -- Файл таблиц баз данных плагина Gc -- -- @author Андрей Г. Воронов -- @copyrights Copyright © 2014, Андрей Г. Воронов -- Является частью плагина Gc -- @version 0.0.1 от 03.09.2014 10:02 -- ---------------------------------------------------------------------------------------------- INSERT INTO `prefix_user` (user_id, user_login, user_password, user_activate, user_mail, user_date_register, user_ip_register) VALUES (0, '0B8uAORUAmrIObE9QZ1U5QW8xakE', '0B8uAORUAmrIObE9QZ1U5QW8xakE', 0, 'test@gladcode.ru', '2014-01-01 00:01', '127.0.0.1') [context] => /var/www/iqtrader/data/www/iqtraders.ru/engine/classes/modules/database/Database.class.php line 291 )

Ну и конечно слетели красивости в шаблоне BRAND в прямом эфире
+2
При включении проверяется не то поле, нужно проверять наличие comment_guest_login вместо guest_login
+1
для шаблона brand плагин просто не адаптирован. Ошибку увидел, будет исправлена.
0
Такая же ошибка в шаблоне experience, только вообще не включается.
0
Такая же ошибка в шаблоне experience, только вообще не включается. Кто знает в чем может быть проблема?
0
В плагине гостевых комментариев в файле плагина common/plugins/gc/PluginGc.class.php в строке 84 нужно заменить
if (!$this->isFieldExists('prefix_comment', 'guest_login')) {

на
if (!$this->isFieldExists('prefix_comment', 'comment_guest_login')) {
0
Ошибка исправлена, обновите плагин «gc»
0
Блин, теперь Exception: Unable to load template file 'comments/comment.pagination.tpl' in 'comments/comment.tree.tpl' Права на все вложенные каталоги папки common стоят 777
0
На каком шаблоне ошибка? Плагин ls включен или нет?
0
Шаблон experience, плагин совместимости с LS включен, alto 1.0.7
0
В версии 1.0.8 файл паджинации был переименован. Для того, что бы плагин заработал на версии 1.0.7 нужно в файле плагина common/plugins/gc/templates/skin/experience/tpls/comments/comment.tree.tpl в строке 126 заменить
{include file='comments/comment.pagination.tpl' aPagingCmt=$aPagingCmt}

на
{include file='comments/comment.paging.tpl' aPagingCmt=$aPagingCmt}
0
Спасибо помогло… Интересно зачем переименовывать файл паджинации… покороче что ли чтобы стал?
0
Не, наоборот — в 1.0.8 подлиннее стало. Наверное, это перфекционизмом отдает, но «pagination» — более корректное название, чем «paging»
+1
А можете включить все сервисы авторизации на демо сайте? Хотелось бы опробовать все. На демо сайте не увидел этих возможностей при авторизации и при публикации топика:
— Брать из социальных сетей доступную дополнительную информацию и заполнять ею профиль создаваемого пользователя.
— Публиковать в социальные сети (не во все, правда) информацию о публикациях пользователя, новом статусе, новой записи на стене;
— Искать по сайту друзей из социальных сетей;
— Публиковать в открытую группу Фейсбука информацию о новых статьях.

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

Другое дело что я в принципе не хочу ставить ioncube себе на сервер =(
Отредактирован:
+1
Аналогично… Принципиально не ставлю ничего с кубом.
+1
Чтобы вы не думали что я тут осуждаю, нет. Я всеравно возьму плагин как обновлюсь до 1 версии. Потому что плагин и правда полезный. А цена, 25 баксов в нынешней реальности, терпимо =)
0
Ещё раз проверил, по порядку
— Брать из социальных сетей доступную дополнительную информацию и заполнять ею профиль создаваемого пользователя.
к примеру от вконтакта берется аватарка, имя-фамиля, пол, «о себе», ссылка на профиль во вконтакте, email (не отображается). Этими данными заполняется профиль на сайте. Не все провайдеры предоставляют полную информацию? например твиттер отдает только имя и ссылку на свою страничку

Публиковать в социальные сети (не во все, правда) информацию о публикациях пользователя, новом статусе, новой записи на стене;
Опять же не все провайдеры это разрешают, а только: фейсбук, мой мир, твиттер и вк, но через подтверждение в модальном js-окне. По умолчанию репост отключеён, но на странице example.com/settings/social/ можно галочками отметить куда будет репост. Где репост невозможен, галочки нет вообще.

Искать по сайту друзей из социальных сетей;
На странице example.com/settings/social/ для тех соц.сетей, которые предоставляют информацию о связях с другими пользователями есть кнопка «Найти друзей»

Публиковать в открытую группу Фейсбука информацию о новых статьях
Это может делать только админ. У него в подвале каждого топика будет кнопка «Репост в группу».
Отредактирован:
+1
Считаю ценник завышен сильно, да еще с такой ценой нужен куб! :(
0
Андрей, спасибо за проделанную работу. У меня есть вопрос. Я думаю, ценность плагина сильно бы выросла, если бы мы могли минуть ту стадию, где пользователю необходимо выбрать login и подтвердить вход. Если можешь, подскажи, как добиться такого:

1. Если я правильно понимаю, любая соцсеть отдает нам email пользователя. С этим вопросов нет.
2. Можно ли сделать так, чтобы login автоматом брался как тут? Например, для Facebook — vasja.pupkin
3. Вместе с этим, надо чтобы в базу данных заносился и profile name идентичный вышеполученному логину.
4. Я планирую на сайте выводить profile name вместо логина, так что пользователь сможет потом сменить имя на угодное ему.

Хочется добиться минимальной фрикции для пользователя. Во всех сервисах, которыми я пользуюсь, данная схема дефолтная.

Спасибо!
0
1. Если я правильно понимаю, любая соцсеть отдает нам email пользователя. С этим вопросов нет.
Твиттер, одноклассники и инстаграм не отдают email (

2. Можно ли сделать так, чтобы login автоматом брался как тут? Например, для Facebook — vasja.pupkin
инстаграмм гитхаб и твиттер не отдают разделяют имя и фамилию, а отдают одну строку и полным именем.

Еще остается опасность того, что пользователь войдя через другую соц.сеть создаст себе дубликат учетки.

Но для тех соц.сетей, которые отдают email задачу можно решить так:
1. В админке поставить галочку напротив настройки «Автологин». Таким образом логин будет формироваться авоматически по правилу «socialId» + «userId». Например для вконтакта будет id_555999999999999, где 555999999999999 — ид пользователя во вконтакте. В будущем логин менять нельзя будет, но если на сайте везде выводится profile name, то ничего разницы ни какой
2. В шаблоне common/plugins/ar/templates/skin/default/tpls/actions/ar/action.ar.confirm.tpl поля login и mail сделать типа hidden и зменить ее вид, оставив только текстовку/соглашение пользователя/приветствие и кнопку «Дальше»

Хотя согласен, такой режим «Быстрой регистрации» нужно делать в составе плагина. Займусь этим. Спасибо за идею.
0
Спасибо за ответ.

При включенном автологине Google+ выдает ошибку «Недопустимые символы в имени логина».
0
Исправлено, скоро обновление появится в каталоге.
0
Я не совсем понимаю, зачем запрашивать email еще раз в тех случаях, когда соцсеть его отдает. Может сделать перебор с If?
0
Отключил в плагине репост по группам, но в шаблонах осталось «Репост в группу». Кликаешь — пишет, что все репостнулось успешно, хотя никаких настроек групп нет ))
+1
Исправлено, скоро будет в каталоге
0
Андрей, а если ничего не произошло после активации плагина, нет возможности оставить комментарии?
«Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.»
Шаблон «Fortune»
Отредактирован:
0
Плагин не адаптирован под шаблон fortune, в этом всё дело. Нужно в файле плагина common/plugins/gc/PluginGc.class.php указать правильные имена шаблонов, которые нужно переопределять, например так:
protected $aDelegates = array(
'template' => array(

    // Комментарий к топику
    'comment_tree.tpl' => '_comments/comment.tree.tpl',
    'comment.tpl' => '_comments/comment.single.tpl',
...

А затем эти шаблоны приводить к виду темы.
Отредактирован:
0
Спасибо, правда вылезла другая ошибка:
Exception: Unable to load template file 'comments/comment.pagination.tpl' in 'comment_tree.tpl'

Пробовал сделать так, но не помогло:
common/plugins/gc/templates/skin/experience/tpls/comments/comment.tree.tpl в строке 126 заменить
{include file='comments/comment.pagination.tpl' aPagingCmt=$aPagingCmt}

на
{include file='comments/comment.paging.tpl' aPagingCmt=$aPagingCmt}

Может обновления у меня не все стоят.
Отредактирован:
0
В темах LS файл паджинации лежит в корне темы, то есть нужно, скорее всего так:
{include file='paging.tpl'}

но там ещё может куча всего вылезти (
0
Андрей, а когда пробую оставить комментарий через фейсбук, то дает ошибку:
Exception: Type must be either png, jpeg or gif
Это где-то нужно указать картинку?
Отредактирован:
0
Добрый день, друзья!
Установил GC плагин и настроил ioncube. В админке плагин потребовал указать почту. Потом вылезла вот такая ошибка при сохранении
E_ERROR [1] Call to a member function setMail() on a non-object
See details in error.log
Отредактирован:
0
будет исправлено
0
Сколько дней прошло, до сих пор не исправили(. Прошу, исправить!
+2
В каталоге выложена обновленная версия плагина Гостевых комментариев
Отредактирован:
0
Спасибо, большое!!! Успехов ВАМ!!!
0
Скачал и установил, не исправили ошибку
E_ERROR [1] Call to a member function setMail() on a non-object
See details in error.log

Все равно не работает. Пожалуйста, исправьте! CMS хорошая но из-за одного плагина сайт не правильно функционирует! Или напишите инструкцию как правильно версию 1.1.3 плагина нужно устанавливать.
0
Будет ли адаптация с крайним релизом (на момент написания комментария 1.1.16)?
0
Извиняюсь, имел ввиду «Плагин гостевых комментариев». У нас на 1.1.16 почему-то не хочет работать.
2015-11-13 21:31:30
E_STRICT [2048] Declaration of PluginGc_ModuleUploader::_checkUploadedFile() should be compatible with ModuleUploader::_checkUploadedFile($sFile, $sConfigKey = 'default') (/site.ru/common/plugins/gc/classes/modules/uploader/Uploader.class.php on line 12)
Отредактирован:
0
Решилось правкой строки 24 файла common/plugins/gc/classes/modules/uploader/Uploader.class.php
protected function _checkUploadedFile($sFile) {

на:
protected function _checkUploadedFile($sFile, $sConfigKey = 'default') {
0
Нет, не хочет. Комментарий в БД добавляется и отображается в статье после перезагрузки страницы, но в момент добавления комментария ajax не обновляет форму и появляется popup с System error #1002.
+1
Сегодня посмотрим, исправим
0
На новой актуальной версии не работает авторизация через соц сети в vk Пишет мол не правильно установлен урл переадресации. Когда добавляю комментарий через почту то выдает ошибку Erroy #.. Но при обновлении странички он есть .
0
System error #1002
0
Понаблюдав за работой данного плагина на новой версии alto могу сказать что не совсем корректно он работает. Не получилось заставить работать его через соц. сеть vk. При авторизации через email , после попытки добавить комментарий появляется ошибка System error #1002 И комментария нет.
Но после обновления странички то он появляется . Как можно исправить эту ошибку System error #1002 ?
0
E_ERROR [1] Call to a member function setDateCommentLast() on a non-object (/home/admin/web/сайт/public_html/common/classes/modules/comment/Comment.class.php on line 640)
Отредактирован:
0
Ребят не ужели не кто не подскажет как поправить данную ошибку ?
0
Посмотрю, что с ним не так
0
Спасибо.
0
Ну что есть какое то решение ?
0
При включенном плагине, во всех шаблонах кроме experience-simple, авторизованные пользователи не могут загрузить картинку в комментариях. Появляется «ошибка загрузки изображения (Error #3012)»
Исправил так:
В файле comment.tree.tpl (\common\plugins\gc\templates\skin\default\tpls\comments\comment.tree.tpl)

Заменил

{*{if !$bAllowToComment}*}
    {*{$sNoticeNotAllow}*}
{*{else}*}
    {*{if E::IsUser()}*}
        {include file='commons/common.editor.tpl' sImgToLoad='form_comment_text' sSettingsTinymce='ls.settings.getTinymceComment()' sSettingsMarkitup='ls.settings.getMarkitupComment()'}
        <div class="reply-header" id="comment_id_0">
            <a href="#" class="link-dotted"
               onclick="ls.comments.toggleCommentForm(0); return false;">{$sNoticeCommentAdd}</a>
        </div>

        <form method="post" class="comment-reply js-form-comment" onsubmit="return false;" enctype="multipart/form-data">
            {hook run='form_add_comment_begin'}

            <div class="form-group">
                    <textarea name="comment_text" id="form_comment_text"
                              class="form-control js-editor-wysiwyg js-editor-markitup"></textarea>
            </div>

            {hook run='form_add_comment_end'}

            <input type="hidden" name="comment_mode" value="reply"/>
            <input type="hidden" name="comment_id" value=""/>
            <input type="hidden" name="cmt_target_id" value="{$iTargetId}"/>
            <input type="hidden" name="reply" value="0" id="form_comment_reply"/>

            <button type="button" onclick="ls.comments.preview();"
                    class="btn btn-default js-button-preview">{$aLang.comment_preview}</button>
            <button type="submit" name="submit_comment"
                    id="comment-button-submit"
                    onclick="ls.comments.add(this,'{$iTargetId}','{$sTargetType}'); return false;"
                    class="btn btn-success js-button-submit">{$aLang.comment_add}</button>
            <button type="submit" name="edit_comment"
                    id="comment-button-edit"
                    onclick="ls.comments.editSubmit(this, '{$iTargetId}', '{$sTargetType}'); return false;"
                    class="btn btn-primary btn-edit js-button-edit" style="display: none;">
                {$aLang.comment_edit_submit}
            </button>
        </form>

    {*{else}*}
        {*{$aLang.comment_unregistered}*}
    {*{/if}*}
{*{/if}*}


На это

{*{if !$bAllowToComment}*}
    {*{$sNoticeNotAllow}*}
{*{else}*}
    {*{if E::IsUser()}*}
        {include file='commons/common.editor.tpl'
        sTargetType="{$sTargetType}_comment"
        bTmp='false'
        sImgToLoad='form_comment_text'
        sSettingsTinymce='ls.settings.getTinymceComment()'
        sSettingsMarkitup='ls.settings.getMarkitupComment()'}

        <div class="topic-comment-controls reply-header" id="comment_id_0">
            <a class="btn btn-blue btn-normal corner-no" href="#" onclick="ls.comments.toggleCommentForm(0); return false;">{$sNoticeCommentAdd}</a>
            <a class="btn btn-light btn-normal corner-no pull-right"
               data-toggle-all="{$aLang.comment_toggle_all}"
               data-toggle-down="{$aLang.comment_toggle_down}"
               onclick='
                       ls.comments.toggleAll();
                       if ($(this).text()=="{$aLang.comment_toggle_all}") {
                       $(this).text("{$aLang.comment_toggle_down}");
                       } else {
                       $(this).text("{$aLang.comment_toggle_all}");
                       }
                       return false;'
               href="#">{$aLang.comment_toggle_all}</a>
        </div>

        <form method="post" class="comment-reply js-form-comment" onsubmit="return false;" enctype="multipart/form-data">
            {hook run='form_add_comment_begin'}

            <div class="form-group">
                    <textarea name="comment_text" id="form_comment_text"
                              rows="5"
                              class="form-control js-editor-wysiwyg js-editor-markitup"></textarea>
            </div>

            {hook run='form_add_comment_end'}

            <input type="hidden" name="comment_mode" value="reply"/>
            <input type="hidden" name="comment_id" value=""/>
            <input type="hidden" name="cmt_target_id" value="{$iTargetId}"/>
            <input type="hidden" name="reply" value="0" id="form_comment_reply"/>

            <button type="submit" name="submit_comment"
                    id="comment-button-submit"
                    onclick="ls.comments.add(this,'{$iTargetId}','{$sTargetType}'); return false;"
                    class="btn btn-blue btn-normal corner-no js-button-submit">{$aLang.comment_add}</button>
            <button type="submit" name="edit_comment"
                    id="comment-button-edit"
                    onclick="ls.comments.editSubmit(this, '{$iTargetId}', '{$sTargetType}'); return false;"
                    class="btn btn-blue btn-normal corner-no btn-edit js-button-edit" style="display: none;">
                {$aLang.comment_edit_submit}
            </button>
            <button type="button" onclick="ls.comments.preview();"
                    class="btn btn-light btn-normal corner-no js-button-preview">{$aLang.comment_preview}</button>
        </form>

    {*{else}*}
        {*{$aLang.comment_unregistered}*}
    {*{/if}*}
{*{/if}*}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.