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

3319
Доброго времени суток!

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

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

Скрытый текст виден только зарегистрированным пользователям
Модуль "Возможно Вы знакомы?" | Компонент "Боты"
Комментарии (42)
ValeraK 17 ноября 2014 в 14:37 0
ValeraK 17 ноября 2014 в 14:38 0
в шаблоне контента - это имеется в виду default.item.tpl.php?
IngDesign (Магомед) 17 ноября 2014 в 14:49 0
Имел ввиду \templates\default\controllers\content\item_view.tpl.php

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

/bookmarks/add/id_типа_контента/id_записи - добавление
/bookmarks/delete/id_закладки - удаление
Олег Васильевич я 17 ноября 2014 в 15:56 0
Хорошее дополнение, спасибо!
ValeraK 17 ноября 2014 в 21:18 0
Используя второй вариант, кнопка добавления и удаления в закладки отображается на странице записи без стилей, а не в меню пользователя, если использовать первый вариант вставки кода.
И еще момент, в закладках не хватает изображения записи контента. Можно ли это исправить?
IngDesign (Магомед) 17 ноября 2014 в 21:50 -1
1. - Вывод в меню пользователя
2. - Вставлять если нужно вывести в другом месте шаблона
ValeraK 17 ноября 2014 в 23:40 0
Почему то ко второму варианту не применяются стили, если вставлять в любом удобном месте на странице записи.
IngDesign (Магомед) 18 ноября 2014 в 09:46 -1
Стилей нет, их прописать нужно
Старый балбес 17 ноября 2014 в 21:23 0
Добавление закладки:
Код 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. }
IngDesign (Магомед) 17 ноября 2014 в 21:46 -1
Это какая версия движка?
Старый балбес 17 ноября 2014 в 21:59 -1
2.1.2
IngDesign (Магомед) 17 ноября 2014 в 22:05 0
Ошибку допустил, с отключенными предупреждениями. Исправил (удалил $this->table_prefix.)
IngDesign (Магомед) 17 ноября 2014 в 21:57 0
Обновил архив
Дмитрий 20 ноября 2014 в 16:26 0
Всю голову уже сломал, всё сделал, распаковал файл залил sgl, нет закладок ((((((((
Может что подскажите? или может свой файл дадите item_view.tpl.php ?
IngDesign (Магомед) 20 ноября 2014 в 16:57 -1
Дмитрий 20 ноября 2014 в 17:02 0
спасибо, буду пробовать.
Дмитрий 20 ноября 2014 в 17:04 0
не знаю почему так, но у меня просто статьи пропадают ((((((((
Дмитрий 20 ноября 2014 в 17:08 0
в 66 строке редактор ошибку показал
IngDesign (Магомед) 20 ноября 2014 в 17:14 -1
Какая версия движка? Таблицы в базе все созданы? Записи все внесены?
Дмитрий 20 ноября 2014 в 17:16 0
версия последняя, таблицы залил, файлы в корне распаковал. единственное у меня диз не дефолтный
IngDesign (Магомед) 20 ноября 2014 в 17:19 -1
Сложно в таком случае определить причину ошибки
IngDesign (Магомед) 20 ноября 2014 в 17:20 -1
Нужно хоть текст ошибки посмотреть
Дмитрий 20 ноября 2014 в 17:23 0
вот мой файл

<?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 } ?>

меняю на твой и всё пропадает. (((
Дмитрий 20 ноября 2014 в 17:24 0
Код PHP:
  1.  
<?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 } ?>
IngDesign (Магомед) 20 ноября 2014 в 17:26 -1
Текст ошибки можно посмотреть?
Дмитрий 20 ноября 2014 в 17:30 0
так там - же не текст, вот скрин
Дмитрий 20 ноября 2014 в 17:25 0
блин опять не туда воткнул код
IngDesign (Магомед) 20 ноября 2014 в 17:31 -1
На сайте ошибка есть, при вставке кода?
Дмитрий 20 ноября 2014 в 17:32 0
нет, просто белый лист, пустой.
Дмитрий 20 ноября 2014 в 17:47 0
вот
Старый балбес 17 ноября 2014 в 21:36 0
IngDesign +
""
Изображение уменьшено. Щелкните, чтобы увидеть оригинал.
Ingvarruss 18 ноября 2014 в 19:15 0
Отлично работает. Однозначно +
Romanovcmc 18 ноября 2014 в 21:14 0
Подскажите, пожалуйста, разместил иконку добавления и удаления в списке записей. Все работает супер.
Вот только как скрыть эту иконку от нелогиненых пользователей?
Код добавлял следующий:
Код 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. ?>
IngDesign (Магомед) 18 ноября 2014 в 22:11 0
Код PHP:
  1. <?php if($user->id) {
  2. ............
  3. } ?>
Romanovcmc 18 ноября 2014 в 22:26 0
Спасибо большое.
Ingvarruss 20 ноября 2014 в 14:33 0
Немного не понял, при добавление по варианту №1 в меню действий, что куда вставлять, чтобы не авторизированные пользователи не видели кнопки?
IngDesign (Магомед) 20 ноября 2014 в 15:11 -1
Код PHP:
  1. // Добавляем кнопку закладок
  2. $is_add = cmsUser::isAdmin() || cmsUser::isAllowed('bookmarks', 'add');
  3.  
  4. if($is_add) {
  5.  
  6. cmsCore::loadControllerLanguage('bookmarks');
  7.  
  8. $this->addCSS('templates/default/controllers/bookmarks/styles.css');
  9.  
  10. if($bid = $this->controller->model->db->getField('bookmarks', "user_id = {$user->id} AND link = '{$ctype['name']}/{$item['slug']}.html'", 'id')) {
  11.  
  12. $this->addToolButton(array(
  13. 'class' => 'deletebookmark',
  14. 'title' => LANG_BOOKMARKS_DEL_BUTTON,
  15. 'href' => href_to('bookmarks', 'delete', $bid)
  16. ));
  17.  
  18. } else {
  19.  
  20. $this->addToolButton(array(
  21. 'class' => 'addbookmark',
  22. 'title' => LANG_BOOKMARKS_ADD_BUTTON,
  23. 'href' => href_to('bookmarks', 'add', array($ctype['id'], $item['id']))
  24. ));
  25.  
  26. }
  27.  
  28. }
  29.  
Дмитрий 20 ноября 2014 в 16:32 0
куда это вписать?
Дмитрий 20 ноября 2014 в 19:02 0
Спасибо большое, разобрался, всё работает )
Ingvarruss 21 ноября 2014 в 16:04 0
Спасибо, помогло
Май 2 декабря 2014 в 04:27 0
Спасибо, нужная вещь!
Norm Gold 8 декабря 2014 в 12:35 +2
Очень хорошая вещь, спасибо!

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