Хак Статей. Добавление статей из категории на фронтенде.

+34
2.53K
Очень мне не нравится админка редактора — можно добавлять только в одну категорию, есть ошибки при добавлении статей(. Вообщем неудобно.
Поэтому решил сделать добавление статей напрямую из любой категории статей.
Должно получится так — в нужной категории статей нажимаем ссылку "Добавить статью", появляется Добавление статьи, где в списке категорий статьи — только одна нужная нам категория (чтоб юзер не промахнулся)

Делаем следующее:

Ответственных за добавление пользователей загоняем в группу например Модераторы, далее для группы Модераторы включаем опции "Добавление статей" и "Добавление статей без модерации".
Далее, в тех категориях, куда нужно добавлять в дальнейшем статьи, включаем "ПРИНИМАТЬ СТАТЬИ ОТ ПОЛЬЗОВАТЕЛЕЙ" — ДА
группу редакторов можно убрать(поставить "Только администраторы") — чтобы не вылезала кривая админка редактора.
Еще, чтобы простые пользователи не добавляли статьи куда не надо — выключаем группе Пользователи добавление статей.

если сильно захотите — выложу картинки, я думаю и так все понятно)

далее в файлах:
папка components/content

router.php
добавляем

  1.  
  2. $routes[] = array(
  3. '_uri' => '/^content\/add([0-9]+).html$/i',
  4. 'do' => 'addarticle',
  5. 1 => 'id'
  6. );
  7.  
должно быть вот так:

  1. $routes[] = array(
  2. '_uri' => '/^content\/add.html$/i',
  3. 'do' => 'addarticle'
  4. );
  5.  
  6. $routes[] = array(
  7. '_uri' => '/^content\/add([0-9]+).html$/i',
  8. 'do' => 'addarticle',
  9. 1 => 'id'
  10. );
  11.  
  12. $routes[] = array(
  13. '_uri' => '/^content\/edit([0-9]+).html$/i',
  14. 'do' => 'editarticle',
  15. 1 => 'id'
  16. );
  17.  
  18.  
frontend.php

добавляем
  1.  
  2. $is_add = $inCore->isUserCan('content/add') && $cat['is_public']==1;
  3. //если нужно включить по конкретным группам - уберите комментарии и предыдущую точку с запятой
  4. // && $cat['modgrp_id'] == $inUser->group_id; // добавить к пред.строке
  5.  
  6. }
  7.  
должно быть вот так:
  1.  
  2. if ($do=='view'){
  3. .....
  4. .........
  5.  
  6. //PAGE HEADING
  7. if($cat['id']>0){
  8.  
  9. $inPage->setTitle($cat['title']);
  10. $pagetitle = $cat['title'];
  11. $showdate = $cat['showdate'];
  12. $showcomm = $cat['showcomm'];
  13. $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.htmlspecialchars($cat['title']).'" href="'.HOST.'/rss/content/'.$cat['id'].'/feed.rss">');
  14.  
  15. $is_add = $inCore->isUserCan('content/add') && $cat['is_public']==1;
  16. //если нужно включить по конкретным группам - уберите комментарии и предыдущую точку с запятой
  17. // && $cat['modgrp_id'] == $inUser->group_id; // добавить к пред.строке
  18.  
  19. }
  20.  
далее в этом же файле ищем

  1.  
  2. $template = ($cat['tpl'] ? $cat['tpl'] : 'com_content_view.tpl');
  3.  
  4. $smarty = $inCore->initSmarty('components', $template);
  5. $smarty->assign('id', $cat['id']);
  6. $smarty->assign('cat', $cat);
  7.  
  8. $smarty->assign('is_homepage', (bool)($inCore->menuId()==1));
  9. $smarty->assign('showdate', $showdate);
  10.  
  11.  
должно быть вот так:
  1.  
  2. $template = ($cat['tpl'] ? $cat['tpl'] : 'com_content_view.tpl');
  3.  
  4. $smarty = $inCore->initSmarty('components', $template);
  5. $smarty->assign('id', $cat['id']);
  6. $smarty->assign('cat', $cat);
  7. $smarty->assign('is_add', $is_add);
  8. $smarty->assign('is_homepage', (bool)($inCore->menuId()==1));
  9. $smarty->assign('showdate', $showdate);
  10.  
и еще пониже в этом же файле находим:

  1. if ($do=='addarticle'){
  2. $inPage->setTitle($_LANG['ADD_ARTICLE']);
  3. $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login));
  4. $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html');
  5. $inPage->addPathway($_LANG['ADD_ARTICLE']);
  6. $pagetitle = $_LANG['ADD_ARTICLE'];
  7.  
  8. $pubcats = $model->getPublicCats();
  9.  
  10.  
  11. // поддержка биллинга
  12. $dynamic_cost = false;
  13. if (IS_BILLING){
  14.  
должно быть вот так:
  1. if ($do=='addarticle'){
  2. $inPage->setTitle($_LANG['ADD_ARTICLE']);
  3. $inPage->addPathway($inUser->nickname, cmsUser::getProfileURL($inUser->login));
  4. $inPage->addPathway($_LANG['MY_ARTICLES'], '/content/my.html');
  5. $inPage->addPathway($_LANG['ADD_ARTICLE']);
  6. $pagetitle = $_LANG['ADD_ARTICLE'];
  7.  
  8. $pubcats = $model->getPublicCats();
  9. if ($id && ($do!=$edit_article)) {
  10. $newpcat=Array();
  11. foreach($pubcats as $p=>$pubcat){
  12. if ($pubcat['id']==$id){
  13. $newpcat[]=$pubcat;
  14. }
  15. }
  16. $pubcats=$newpcat;
  17. }
  18.  
  19. // поддержка биллинга
  20. $dynamic_cost = false;
  21. if (IS_BILLING){
  22.  
и последнее в файле
com_content_view.tpl
в нужном месте (в начале) добавляем ссылку на добавление

  1.  
  2. {if $is_add}
  3. <p><a href="/content/add{$cat.id}.html">{$LANG.ADD_ARTICLE}?</a></p>
  4. {/if}
  5.  
пробуем радуемся)

АНОНС следующей записи: статьи в клубах, проблема в блогах клубов с табличными данными. Нужно ли это нам? (мне вот нужно😊)
0
Darik Darik 12 лет назад #
+1
0
lezginka.ru lezginka.ru 12 лет назад #
+
удобно для порталов
0
Джехутимери Джехутимери 12 лет назад #
Однозначно +
Очень полезная штуковина!
0
Алфей Алфей 12 лет назад #
Однозначно +++, я уже задавал на форуме подобный вопрос. Спасибо!
0
Роман Роман 12 лет назад #
+
Беру на заметку. В хозяйстве сгодится
0
Александр Александр 12 лет назад #
ну просто офигенно! Как раз задумался о данном модуле, а тут раз и уже готовый) Супер, огромное спасибо. Только один вопросик, как скрыть ссылку "добавить статью" в том разделе который закрыт для добавления?
0
Крот Крот 12 лет назад #
как скрыть ссылку "добавить статью" в том разделе который закрыт для добавления?

есть такая проблема, пока руки еще не дошли
0
Ingvarruss Ingvarruss 12 лет назад #
+ Отличная доработка для портала
+1
santi santi 12 лет назад #
огромное спасибо. полезнейшая вестчь, буду ставить.
думаю данную разработку надо внести в Базовую версию инстанта.
0
Александр Александр 12 лет назад #
Полностью поддерживаю.
0
spacer spacer 12 лет назад #
Хороший модуль.
А можно здесь реализовать добавление статей сразу в несколько категорий? Пусть юзер выбирает одну, а модератор уже добавляет и другие категории, если статья и туда подходит.
0
eoleg eoleg 12 лет назад #
+
То что надо!
Удалил компонент идеи и сделал на основе статей!
0
eoleg eoleg 12 лет назад #
мне нужно вставить условие в com_content_view.tpl в такое место где уже пройдет проверка на право пользователя добавлять статью и на право добавлять статью в категорию
{if $is_add}
<p><a href="/content/add{$cat.id}.html">{$LANG.ADD_ARTICLE}?</a></p>
{/if}
подскажите где это в com_content_view.tpl
0
Крот Крот 12 лет назад #
можно добавить например тут
Код PHP:
  1. {if $is_add}
  2. <p><a href="/content/add{$cat.id}.html">{$LANG.ADD_ARTICLE}?</a></p><br />
  3. {/if}
  4. {if $is_subcats}
  5. <div class="categorylist">
  6. {foreach key=tid item=subcat from=$subcats}
  7. <div class="subcat">
а так, разницы куда добавлять нет, это же шаблон, он обрабатывается тогда, когда уже проведены все проверки
0
eoleg eoleg 12 лет назад #
тогда получается проверки не все проведены так как у меня Добавление статьи появляется в категории в которой нет разрешение на добавление.
0
Крот Крот 12 лет назад #
это не баг, это фича smile
посмотрю что нужно сделать, у самого так )
0
eoleg eoleg 12 лет назад #
а как дописать условие проверки на добавление в раздел и если есть разрешение то выводить а если нет то не выводить ссылку на добавление
0
Крот Крот 12 лет назад #
нашел поправил

вкратце - надо поменять:
убрать
$is_add = $inCore->isUserCan('content/add') - то что было в старом посте, если вы не обновляли еще - искать НЕ НУЖНО

добавить

Код PHP:
  1. //PAGE HEADING
  2. if($cat['id']>0){
  3. $inPage->setTitle($cat['title']);
  4. $pagetitle = $cat['title'];
  5. $showdate = $cat['showdate'];
  6. $showcomm = $cat['showcomm'];
  7. $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.htmlspecialchars($cat['title']).'" href="'.HOST.'/rss/content/'.$cat['id'].'/feed.rss">');
  8. $is_add = $inCore->isUserCan('content/add') && $cat['is_public']==1;
  9. //если нужно включить по конкретным группам - уберите комментарии и предыдущую точку с запятой
  10. // && $cat['modgrp_id'] == $inUser->group_id; // добавить к пред.строке
  11. }
+1
Крот Крот 12 лет назад #
тут выше написано
... если вы не обновляли еще - искать НЕ НУЖНО

почему то не влезло((
0
eoleg eoleg 12 лет назад #
Отлично, то что нужно
+1
Крот Крот 12 лет назад #
пост обновлен
0
AndroS AndroS 11 лет назад #
Респект! А для 1.10 будет решение?
0
nedoriko nedoriko 11 лет назад #
я так понимаю это для 1.9? или 8?

Еще от автора

Инвайтер 1.9 для 1.10.6
Доброго всем времени суток! Решил нарушить сложившуюся здесь традицию и решил вернуться сюда с обновлениями.
Инстант "по взрослому". Часть 2. Авторизация. Аякс. v1.10
Доброго всем времени суток! Продолжая серию Инстант "по взрослому", сегодня хотел бы показать более мощный плагин авторизации.
Инстант "по взрослому". Часть 1. Авторизация. Счетчик неверных входов. v1.10
Доброго всем дня! Продолжим наши уроки по усовершенствованию Инстанта. Сегодня мы будем изучать и усовершенствовать первую ветку Инстанта.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.