
Добрый день!
Уже почти как год назад появилась на свет InstantCMS 2. В то время я блуждал по просторам всемирной паутины в поисках подходящего фреймворка или системы управления контентом на базе которого (или которой =)) я смогу построить свой сайт, та система, которая будет максимально соответствовать моим требованиям и которая будет содержать в себе минимальный набор необходимого мне функционала.Выбор мой пал на… другую CMS (((
Совсем недавно, сначала в одной из тем на форуме, а затем и в своем блоге IngDesign выложил компонент "Закладки пользователей". Радости моей не было предела в тот прекрасный день! Я проинсталлил компонент на локалку и проверил его работоспособность — вторая волна счастья накрыла меня )). Закладки делали то, чего мне так не хватало для своего будущего проекта. Они великолепно выполняли свою функцию, но хотелось немножко большего...
В преддверии праздника я выбрал "свободную минуточку" и решил сделать форк закладок IngDesign'а. Но, чем дальше в лес, тем меньше исходного кода осталось не тронутым)), даже таблицы компонента в базе данных претерпели на столько существенные изменения, что их количество сократилось до одной, а, от её структуры, не тронутым осталось только поле "id". Собственно и сам код процентов на 90-95 полностью переписан. Поэтому можно говорить о другом самостоятельном компоненте.
Избранные записи пользователей
Основная функция компонента не изменилась, он по прежнему необходим пользователям, чтобы организовать быстрый доступ к понравившемся материалам сайта (статьям, постам в блогах, альбомов и др.) Также, по примеру Хабрахабр, я добавил возможность сохранять в "избранном" комментарии других пользователей. И реализовал всю эту "не легкую" работу через ajax.В Панели управления настраивается какой тип контента и кому разрешить добавлять записи в избранное, включить или нет добавление комментариев в список избранного. Т.е. возможен более гибкий механизм работы компонента. При этом список избранных записей отображается на странице пользователя в том же виде, что и список контента в соответствующем разделе сайта, скажем так, нативный рендеринг😊Это позволяет показывать все картиночки, кнопочки и другую сопутствующую информацию, которая предполагалась для данного типа контента.
Более подробно познакомиться и пощупать компонент можно на демосайте (данные для входа внизу статьи).
Как установить.
Компонент устанавливается как любое стандартное дополнение InstantCMS 2.x — через панель администрирования в разделе компоненты нажимаем "Установить пакет дополнения", выбираем заранее скачанный файл и следуем инструкциям на экране. Более подробно можно почитать здесь: http://docs.instantcms.ru/manual/addons.Компонент установлен в системе, но это еще не всё… Теперь надо прописать "указатели" чтобы пользователь мог взаимодействовать с компонентом. Для этого в файлы шаблона в необходимых местах вставляем ссылку:
<?php echo $item['favorite_widget']; ?>

Поэтому:
для вывода типов контента следующий код:
<?php if ($ctype['is_favorites']){ ?> <div class="bar_item bi_favorite"> <?php echo $item['favorite_widget']; ?> </div> <?php } ?>
albums_list.tpl.php (вставляем код между 114 и 115 строками)
default_item.tpl.php (147-148 строки)
default_list.tpl.php (126-127 строки)
default_list_featured.tpl.php (126-127 строки)
default_list_tiles.tpl.php (110-111 строки)
default_list_table.tpl.php — для этого файла сначала вставляем код
<?php if ($ctype['is_favorites']) { ?> <th> </th> <?php } ?>
<?php if ($ctype['is_favorites']){ ?> <td class="td_fav"> <?php echo $item['favorite_widget']; ?> </td> <?php } ?>
Все указанные файлы лежат в ..\templates\default\content\. Если у вас там есть дополнительные файлы, по желанию и необходимости, вы можете добавить в них приведенный выше код))
также для шаблона комментария ..\templates\default\controllers\comments\comment.tpl.php вставляем между 63 и 64 строками
<?php echo $entry['favorite_widget']; ?> <?php } else { ?> <?php $is_show = ( cmsUser::isAdmin() || cmsUser::isAllowed('favorites', 'add') ) && cmsCore::getController('favorites')->options['is_comment_folder']; if ($is_show) { echo cmsCore::getController('favorites')->renderFavoriteWidget('comments', NULL, $entry); } ?> <?php } ?>
Мы это сделали! 

Всем удачи! ))
Спасибо за внимание!
demo — login: demo@demo.ru pw: 123456Скачать "модифицированные" файлы шаблонов: fav_links.zip
P.S. Для поддержания и развития этого компонента и других дополнений для InstantCMS буду рад вашей благодарности в виде "спасибо" на R396646181623, Z304069635163 или плюсика в карме =)
Думаю расположение кнопки избранного вопрос привычки)) Я сделал на подобии хабра, если немного позависать на сайте, привыкаешь и получается очень удобно)))
НО! Насколько сложно сделать добавление в избранное людей?
Но, IMHO, зачем добавлять пользователей в избранное?! Есть стандартный механизм - список друзей.
Также рассматриваю возможность сделать подписки на пользователей (т.е. добавить юзера в отдельный список, где потом можно следить за его деятельностью - например публикация статей, картинок и т.д.)
а так все равно огромное спасибо, если буду когда то на второй обязательно поставлю! ++
Что-то не могу на демо-сайт зайти. - "Вход не выполнен. Проверьте правильность адреса e-mail и пароля."
p.s. Спасибо вам за "+"
Что может быть ?
Но вот одно неудобство.. я когда то скопировал файл default_list_featured.tpl.php, переименовал в default_list_read.tpl.php и изменил вывод под себя (просто стили заменил).. В нем нажимаю на звезду.. ничего не происходит, если только не обновить страницу.. Может есть решение для этого? )
Замените файл картинки ..\templates\default\controllers\favorites\favorite.gif на соответствующую вашим потребностям и всё! ))
Пригодится 100% :)
Но логически в худшем случае компонент просто не будет работать. Хотя структура такая что ломаться особо нечему)) Если, к примеру, поменяются файлы-шаблонов контента, т.е. старые перезапишутся новыми, то это поправимо. Название хуков и системных функций r2 менять не должен, а в остальном компонент автономен.
В любом случае, по мере своей возможности я буду поддерживать компонент для новых версий Инстанта.
Сайт работает без перебоем, но после замены необходимых фалов в папке ..\templates - никаких изменений при отображении не произошло.
Огромное Вам спасибо!
У меня сразу предложение. В репутации пользователей есть просмотр тех, кто проголосовал за твой профиль.
Хорошо бы такое сделать и для закладок.
Возможность просматривать список избранного других пользователей есть.
При нажатии на количество голосов, появляется аякс-окно со списком пользователей, которые поставили репутацию.
И сдесь можно так сделать. Нажимаешь на количество пользователей, которые добавили данный материал в избранное, и появляется аякс-окно со списком пользователей, которые добавили этот материал в избранное..
В целом можно сделать... а на сколько это будет полезно?))
Моё дело внести предложение. А Вы уже сами решите, стоит этому быть или нет.
На мой взгляд для поиска пользователей по интересам самое то.
Выводится только в комментариях.
если у пользователя или его друзей нет комментариев.
Нашел причину косячка:
в ..\system\controllers\favorites\hooks\comments_before_list.php
нужно исправить 7-ую строку:
Пилю обновление. Как закончу выложу в новом посте.
Обновление в работе, релиз ориентировочно конец мая - июнь
Спасибо за понимание.
- Исправлены все косяки указанные здесь в комментариях;
- Добавлена возможность просмотра списка пользователей, которые добавили запись себе в избранное;
- Добавлен виджет со списком тегов (и кол-вом их использования) избранных записей пользователя, по которым можно осуществлять быстрый поиск по своим избранным записям;
- Также пользователь может добавлять/изменять свои метки к избранным записям. (Функционал на подобие сайта хабрахабр).
Ждем выхода новой версии iCMS 2!
Но! стоит заметить что в концепции iCMS 2 вполне реализуемые!!!
В рамках своего проекта выполнил компонент для изменения системы, на распространенном классе vqmod.
Этим замечательным классом пользуются множество распространенных cms drupal. opencart и др. Достаточно загрузить xml файл и нажать кнопку установить. Будет создана копия любого файла системы с изменениями обозначенными в xml.И системы следующим шагом будет подключать модифицированный файл. Немного приведу в порядок компонент редактора xml и выложу бесплатно.
за это отвечает строка кода в шаблоне ..\templates\default\controllers\favorites\profile_tab.tpl.php
Судя по симптомам компонент отчетливо не видит переменную $profile - это выражается и в заголовке страницы и также в глубинометре (в хлебных крошках пропускается пункт имени пользователя).
Причем на локалке все отрабатывает нормально и все описанные проблемы не проявляются. В кодовой базе тоже вроде проблем не замечено. Единственное, что приходит на ум - это проверить права на файлы и папки компонента, может быть причина в них? (Но одновременно у всех маловероятно)
Буду думать...
Ждём обновление, оно как раз в работе))) В компоненте исправлены ряд багов включая указанный сейчас и выше в комментариях, а также добавлены обработчики удаления пользователей, удаление контента и др. + новый функционал.
Старые "косячки" конечно же присутствуют
Так что если очень очень хочется можете обновится, но я бы посоветовал немного подождать, постараюсь в течение одной-двух недель допилить обновление и выложить его. Как я ранее писал, это обновление включает ряд "критических" доработок и исправление многих мелких багов, и плюс новый функционал. Исправление "критических" моментов стало возможно после выхода новой версии InstantCMS 2.3, в ядро которой внесены ряд необходимых дополнений.
http://instantcms.ru/blogs/bitblog/komponent-izbranoe-dlja-instantcms-2-x.html#comment_79809
В любом случае обновление уже совсем скоро))
http://docs.instantcms.ru/manual/menu/special
Михаил, чтобы id подменялся на текущего пользователя ссылка будет выглядеть так: users/{user.id}/favorites
При этом не забудьте настроить отображение этого пункта меню (чтобы не показывать его гостям сайта).
Не подскажите, как?
Получаю количество избранного через $count = $favorites_model->getUserFavoritesCount($user_id); Если $count == 0 не показываем таб (в вашем случае ссылку).
P.S. Если будете делать в main.tpl.php то user_id можно получить, например так: cmsUser::getInstance()->id;
А если мне требуется установить иконку, например, в виджете HTML-блок, то т.к. <?php echo $item['favorite_widget']; ?> нельзя, то какой мне код надо скопировать для ее вывода?
Если вы можете вытащить и передать в функцию renderFavoriteWidget(...) нужные параметры, то в принципе куда выводить виджет уже не важно =)
Как вариант, можете попробовать костыльный метод в js-скрипте повесить на onDocumentReady() перенос виджета из записи в бок в html-виджет. Также посмотрите есть еще один компонент закладок - http://instantcms.ru/blogs/ingdesign/zakladki-dlja-tipov-kontenta-instantcms-2.html, возможно он вам подойдет больше.
Напомню, что сейчас если у пользователя нет избранных записей то вкладка "Избранное" вообще не отображается. Следовательно и нажимать никуда не надо чтобы увидеть 404! Как только пользователь добавит себе в список какой либо понравившийся ему материал, у него в профиле будет новый таб "Избранное", при переходе по которому он сможет увидеть список своего избранного контента.
Не могу установить компонент избранное на Instant 2.8
Помогите пожалуйста.
2. Удалить вашу версию компонента и установить последнюю на сегодняшний день из каталога дополнений. У вас стоит древняя версия еще чуть ли не на InstantCMS 2.0))