Закладки для типов контента, InstantCMS 2

+48
4.41K
Доброго времени суток!

Сделал простой компонент закладки, для типов контента, для своего проекта.
Увидев тему instantcms.ru/forum/thread19568.html решил что может кому еще пригодится, и выложил то, что получилось.

По багам пишем в комментарии.

Группе, к которой вы принадлежите, запрещено просматривать этот скрытый текст
0
ValeraK ValeraK 10 лет назад #
shock
0
ValeraK ValeraK 10 лет назад #
в шаблоне контента - это имеется в виду default.item.tpl.php?
0
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Имел ввиду \templates\default\controllers\content\item_view.tpl.php

Но это уже на ваше усмотрение. Ссылку можно добавить куда угодно

/bookmarks/add/id_типа_контента/id_записи - добавление
/bookmarks/delete/id_закладки - удаление
Олег Васильевич я Олег Васильевич я 10 лет назад #
Комментарий удален
0
ValeraK ValeraK 10 лет назад #
Используя второй вариант, кнопка добавления и удаления в закладки отображается на странице записи без стилей, а не в меню пользователя, если использовать первый вариант вставки кода.
И еще момент, в закладках не хватает изображения записи контента. Можно ли это исправить?
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
1. - Вывод в меню пользователя
2. - Вставлять если нужно вывести в другом месте шаблона
0
ValeraK ValeraK 10 лет назад #
Почему то ко второму варианту не применяются стили, если вставлять в любом удобном месте на странице записи.
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Стилей нет, их прописать нужно
0
Старый балбес Старый балбес 10 лет назад #
Добавление закладки:
Код PHP:
  1. Notice: Undefined property: modelBookmarks::$table_prefix in \system\controllers\bookmarks\model.php on line 9
Замените функцию getContentItem модели:
Код PHP:
  1. public function getContentItem($ctype_id, $id) {
  2. $ctype_name = $this->getField('content_types', $ctype_id, 'name');
  3. $table_name = $this->table_prefix.'con_'.$ctype_name;
  4. return $this->db->getFields($table_name, "id = {$id}");
  5. }
На эту:
Код PHP:
  1. public function getContentItem($ctype_id, $id) {
  2. $core = cmsCore::getInstance();
  3. $ctype_name = $this->getField('content_types', $ctype_id, 'name');
  4. $table_name = 'con_'. $ctype_name;
  5. return $core->db->getFields($table_name, "id = {$id}");;
  6. }
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Это какая версия движка?
-1
Старый балбес Старый балбес 10 лет назад #
2.1.2
0
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Ошибку допустил, с отключенными предупреждениями. Исправил (удалил $this->table_prefix.)
0
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Обновил архив
0
Дмитрий Дмитрий 10 лет назад #
Всю голову уже сломал, всё сделал, распаковал файл залил sgl, нет закладок ((((((((
Может что подскажите? или может свой файл дадите item_view.tpl.php ?
0
Дмитрий Дмитрий 10 лет назад #
спасибо, буду пробовать.
0
Дмитрий Дмитрий 10 лет назад #
не знаю почему так, но у меня просто статьи пропадают ((((((((
0
Дмитрий Дмитрий 10 лет назад #
в 66 строке редактор ошибку показал
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Какая версия движка? Таблицы в базе все созданы? Записи все внесены?
0
Дмитрий Дмитрий 10 лет назад #
версия последняя, таблицы залил, файлы в корне распаковал. единственное у меня диз не дефолтный
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Сложно в таком случае определить причину ошибки
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Нужно хоть текст ошибки посмотреть
0
Дмитрий Дмитрий 10 лет назад #
вот мой файл

<?php

$this->setPageTitle($item['title']);

if (!empty($ctype['seo_keys'])){ $this->setPageKeywords($ctype['seo_keys']); }
if (!empty($ctype['seo_desc'])){ $this->setPageDescription($ctype['seo_desc']); }
if (!empty($item['seo_keys'])){ $this->setPageKeywords($item['seo_keys']); }
if (!empty($item['seo_desc'])){ $this->setPageDescription($item['seo_desc']); }

$base_url = $ctype['name'];



if ($ctype['options']['list_on']){
$list_header = empty($ctype['labels']['list']) ? $ctype['title'] : $ctype['labels']['list'];
$this->addBreadcrumb($list_header, href_to($base_url));
}

if (isset($item['category'])){
foreach($item['category']['path'] as $c){
$this->addBreadcrumb($c['title'], href_to($base_url, $c['slug']));
}
}

$this->addBreadcrumb($item['title']);

$user = cmsUser::getInstance();

if (!$item['is_approved'] && $is_moderator){
$this->addToolButton(array(
'class' => 'accept',
'title' => LANG_MODERATION_APPROVE,
'href' => href_to($ctype['name'], 'approve', $item['id'])
));
}

if ($item['is_approved'] || $is_moderator){
if (cmsUser::isAllowed($ctype['name'], 'edit', 'all') ||
(cmsUser::isAllowed($ctype['name'], 'edit', 'own') && $item['user_id'] == $user->id)){
$this->addToolButton(array(
'class' => 'edit',
'title' => sprintf(LANG_CONTENT_EDIT_ITEM, $ctype['labels']['create']),
'href' => href_to($ctype['name'], 'edit', $item['id'])
));
}

if (cmsUser::isAllowed($ctype['name'], 'delete', 'all') ||
(cmsUser::isAllowed($ctype['name'], 'delete', 'own') && $item['user_id'] == $user->id)){
$this->addToolButton(array(
'class' => 'delete',
'title' => sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create']),
'href' => href_to($ctype['name'], 'delete', $item['id']),
'onclick' => "if(!confirm('".sprintf(LANG_CONTENT_DELETE_ITEM_CONFIRM, $ctype['labels']['create'])."')){ return false; }"
));
}
}

?>

<?php

$this->renderContentItem($ctype['name'], array(
'item' => $item,
'ctype' => $ctype,
'fields' => $fields,
'props' => $props,
'props_values' => $props_values,
));

?>


<?php if ($item['is_approved'] && $item['approved_by'] && ($user->is_admin || $user->id == $item['user_id'])){ ?>
<div class="content_moderator_info">
<?php echo LANG_MODERATION_APPROVED_BY; ?>
<a href="<?php echo href_to('users', $item['approved_by']['id']); ?>"><?php echo $item['approved_by']['nickname']; ?></a>
<span class="date"><?php echo html_date_time($item['date_approved']); ?></span>
</div>
<?php } ?>

<?php if (!empty($item['comments_widget'])){ ?>
<?php echo $item['comments_widget']; ?>
<?php } ?>

меняю на твой и всё пропадает. (((
0
Дмитрий Дмитрий 10 лет назад #
Код PHP:
<?php

$this->setPageTitle($item['title']);

if (!empty($ctype['seo_keys'])){ $this->setPageKeywords($ctype['seo_keys']); }
if (!empty($ctype['seo_desc'])){ $this->setPageDescription($ctype['seo_desc']); }
if (!empty($item['seo_keys'])){ $this->setPageKeywords($item['seo_keys']); }
if (!empty($item['seo_desc'])){ $this->setPageDescription($item['seo_desc']); }

$base_url = $ctype['name'];



if ($ctype['options']['list_on']){
$list_header = empty($ctype['labels']['list']) ? $ctype['title'] : $ctype['labels']['list'];
$this->addBreadcrumb($list_header, href_to($base_url));
}

if (isset($item['category'])){
foreach($item['category']['path'] as $c){
$this->addBreadcrumb($c['title'], href_to($base_url, $c['slug']));
}
}

$this->addBreadcrumb($item['title']);

$user = cmsUser::getInstance();

if (!$item['is_approved'] && $is_moderator){
$this->addToolButton(array(
'class' => 'accept',
'title' => LANG_MODERATION_APPROVE,
'href' => href_to($ctype['name'], 'approve', $item['id'])
));
}

if ($item['is_approved'] || $is_moderator){
if (cmsUser::isAllowed($ctype['name'], 'edit', 'all') ||
(cmsUser::isAllowed($ctype['name'], 'edit', 'own') && $item['user_id'] == $user->id)){
$this->addToolButton(array(
'class' => 'edit',
'title' => sprintf(LANG_CONTENT_EDIT_ITEM, $ctype['labels']['create']),
'href' => href_to($ctype['name'], 'edit', $item['id'])
));
}

if (cmsUser::isAllowed($ctype['name'], 'delete', 'all') ||
(cmsUser::isAllowed($ctype['name'], 'delete', 'own') && $item['user_id'] == $user->id)){
$this->addToolButton(array(
'class' => 'delete',
'title' => sprintf(LANG_CONTENT_DELETE_ITEM, $ctype['labels']['create']),
'href' => href_to($ctype['name'], 'delete', $item['id']),
'onclick' => "if(!confirm('".sprintf(LANG_CONTENT_DELETE_ITEM_CONFIRM, $ctype['labels']['create'])."')){ return false; }"
));
}
}

?>

<?php

$this->renderContentItem($ctype['name'], array(
'item' => $item,
'ctype' => $ctype,
'fields' => $fields,
'props' => $props,
'props_values' => $props_values,
));

?>


<?php if ($item['is_approved'] && $item['approved_by'] && ($user->is_admin || $user->id == $item['user_id'])){ ?>
<div class="content_moderator_info">
<?php echo LANG_MODERATION_APPROVED_BY; ?>
<a href="<?php echo href_to('users', $item['approved_by']['id']); ?>"><?php echo $item['approved_by']['nickname']; ?></a>
<span class="date"><?php echo html_date_time($item['date_approved']); ?></span>
</div>
<?php } ?>

<?php if (!empty($item['comments_widget'])){ ?>
<?php echo $item['comments_widget']; ?>
<?php } ?>
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Текст ошибки можно посмотреть?
0
Дмитрий Дмитрий 10 лет назад #
так там - же не текст, вот скрин
0
Дмитрий Дмитрий 10 лет назад #
блин опять не туда воткнул код
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
На сайте ошибка есть, при вставке кода?
0
Дмитрий Дмитрий 10 лет назад #
нет, просто белый лист, пустой.
0
Дмитрий Дмитрий 10 лет назад #
вот
0
Старый балбес Старый балбес 10 лет назад #
IngDesign +
""
0
Ingvarruss Ingvarruss 10 лет назад #
Отлично работает. Однозначно +
0
Romanovcmc Romanovcmc 10 лет назад #
Подскажите, пожалуйста, разместил иконку добавления и удаления в списке записей. Все работает супер.
Вот только как скрыть эту иконку от нелогиненых пользователей?
Код добавлял следующий:
Код PHP:
  1. <?php
  2. cmsCore::loadControllerLanguage('bookmarks');
  3. $this->addCSS('templates/default/controllers/bookmarks/styles.css');
  4. if($bid = $this->controller->model->db->getField('bookmarks', "user_id = {$user->id} AND link = '{$ctype['name']}/{$item['slug']}.html'", 'id')) {
  5. echo '<a href="/bookmarks/delete/'.$bid.'" title="'.LANG_BOOKMARKS_DEL_BUTTON.'"><img src="templates/default/controllers/bookmarks/del-icon.png"></a>';
  6. } else {
  7. echo '<a href="/bookmarks/add/'.$ctype['id'].'/'.$item['id'].'" title="'.LANG_BOOKMARKS_ADD_BUTTON.'"><img src="templates/default/controllers/bookmarks/add-icon.png"></a>';
  8. }
  9. ?>
0
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Код PHP:
  1. <?php if($user->id) {
  2. ............
  3. } ?>
0
Romanovcmc Romanovcmc 10 лет назад #
Спасибо большое.
0
Ingvarruss Ingvarruss 10 лет назад #
Немного не понял, при добавление по варианту №1 в меню действий, что куда вставлять, чтобы не авторизированные пользователи не видели кнопки?
-1
IngDesign (Магомед) IngDesign (Магомед) 10 лет назад #
Код PHP:
  1. // Добавляем кнопку закладок
  2. $is_add = cmsUser::isAdmin() || cmsUser::isAllowed('bookmarks', 'add');
  3. if($is_add) {
  4. cmsCore::loadControllerLanguage('bookmarks');
  5. $this->addCSS('templates/default/controllers/bookmarks/styles.css');
  6. if($bid = $this->controller->model->db->getField('bookmarks', "user_id = {$user->id} AND link = '{$ctype['name']}/{$item['slug']}.html'", 'id')) {
  7. $this->addToolButton(array(
  8. 'class' => 'deletebookmark',
  9. 'title' => LANG_BOOKMARKS_DEL_BUTTON,
  10. 'href' => href_to('bookmarks', 'delete', $bid)
  11. ));
  12. } else {
  13. $this->addToolButton(array(
  14. 'class' => 'addbookmark',
  15. 'title' => LANG_BOOKMARKS_ADD_BUTTON,
  16. 'href' => href_to('bookmarks', 'add', array($ctype['id'], $item['id']))
  17. ));
  18. }
  19. }
0
Дмитрий Дмитрий 10 лет назад #
куда это вписать?
0
Дмитрий Дмитрий 10 лет назад #
Спасибо большое, разобрался, всё работает )
0
Ingvarruss Ingvarruss 10 лет назад #
Спасибо, помогло
0
Май Май 9 лет назад #
Спасибо, нужная вещь!
+2
Norm Gold Norm Gold 9 лет назад #
Очень хорошая вещь, спасибо!

Если контент не имеет описания, то просто белая страница показывается (при добавлении в закладки),
А если в /system/controllers/bookmarks/actions/add.php удалить строку $bookmark['description'] = $item['content'] ? mb_substr(strip_tags($item['content']), 0, $this->options['dcount'], 'UTF-8') : ''; то всё нормально, добавляются записи и без описания

Еще от автора

Компонент "Боты"
Доброго времени суток! Представляю Вам компонент "Боты".
Модуль "Возможно Вы знакомы?"
Выводит возможных знакомых пользователя, по параметрам: - Общий город - Общая группа - Общие друзья, с подсчетом их количества Версия для 1.10.3 - 1.
Плагин для вывода статьи, или категории, из каталога статей, на главную.
Приветствую! Решил выложить плагин, который писал под один из своих проектов. Возможно есть и другое решение, но я его не нашел на сайте.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.