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

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

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

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

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

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

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

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

Код PHP:
  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

добавляем
Код PHP:
  1.  
  2. $is_add = $inCore->isUserCan('content/add') && $cat['is_public']==1;
  3. //если нужно включить по конкретным группам - уберите комментарии и предыдущую точку с запятой
  4. // && $cat['modgrp_id'] == $inUser->group_id; // добавить к пред.строке
  5.  
  6. }
  7.  
должно быть вот так:
Код PHP:
  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.  
далее в этом же файле ищем

Код PHP:
  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.  
должно быть вот так:
Код PHP:
  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.  
и еще пониже в этом же файле находим:

Код PHP:
  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.  
должно быть вот так:
Код PHP:
  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
в нужном месте (в начале) добавляем ссылку на добавление

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

АНОНС следующей записи: статьи в клубах, проблема в блогах клубов с табличными данными. Нужно ли это нам? (мне вот нужно smile )
Компонент, модуль и плагин для рейтинга блогов (для 1.8 и 1.9) | Хак - Память закладок (tabs).
Комментарии (23)
Darik 23 декабря 2011 в 21:30 0
+1
lezginka.ru 23 декабря 2011 в 21:48 0
+
удобно для порталов
Джехутимери 23 декабря 2011 в 22:05 0
Однозначно +
Очень полезная штуковина!
Алфей 24 декабря 2011 в 20:54 0
Однозначно +++, я уже задавал на форуме подобный вопрос. Спасибо!
Роман 24 декабря 2011 в 22:17 0
+
Беру на заметку. В хозяйстве сгодится
Александр 25 декабря 2011 в 14:57 0
ну просто офигенно! Как раз задумался о данном модуле, а тут раз и уже готовый) Супер, огромное спасибо. Только один вопросик, как скрыть ссылку "добавить статью" в том разделе который закрыт для добавления?
Крот 26 декабря 2011 в 07:30 0
как скрыть ссылку "добавить статью" в том разделе который закрыт для добавления?

есть такая проблема, пока руки еще не дошли
Ingvarruss 26 декабря 2011 в 08:35 0
+ Отличная доработка для портала
santi 26 декабря 2011 в 09:57 +1
огромное спасибо. полезнейшая вестчь, буду ставить.
думаю данную разработку надо внести в Базовую версию инстанта.
Александр 26 декабря 2011 в 16:32 0
Полностью поддерживаю.
spacer 12 марта 2012 в 13:05 0
Хороший модуль.
А можно здесь реализовать добавление статей сразу в несколько категорий? Пусть юзер выбирает одну, а модератор уже добавляет и другие категории, если статья и туда подходит.
eoleg 8 октября 2012 в 00:08 0
+
То что надо!
Удалил компонент идеи и сделал на основе статей!
eoleg 8 октября 2012 в 02:21 0
мне нужно вставить условие в 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
Крот 8 октября 2012 в 05:06 0
можно добавить например тут
Код PHP:
  1. {if $is_add}
  2. <p><a href="/content/add{$cat.id}.html">{$LANG.ADD_ARTICLE}?</a></p><br />
  3. {/if}
  4.  
  5.  
  6. {if $is_subcats}
  7. <div class="categorylist">
  8. {foreach key=tid item=subcat from=$subcats}
  9. <div class="subcat">
  10.  
а так, разницы куда добавлять нет, это же шаблон, он обрабатывается тогда, когда уже проведены все проверки
eoleg 8 октября 2012 в 09:35 0
тогда получается проверки не все проведены так как у меня Добавление статьи появляется в категории в которой нет разрешение на добавление.
Крот 8 октября 2012 в 10:30 0
это не баг, это фича smile
посмотрю что нужно сделать, у самого так )
eoleg 13 октября 2012 в 22:44 0
а как дописать условие проверки на добавление в раздел и если есть разрешение то выводить а если нет то не выводить ссылку на добавление
Крот 19 октября 2012 в 15:18 0
нашел поправил

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

добавить

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

почему то не влезло((
eoleg 19 октября 2012 в 18:09 0
Отлично, то что нужно
Крот 19 октября 2012 в 15:18 +1
пост обновлен
AndroS 1 декабря 2012 в 02:58 0
Респект! А для 1.10 будет решение?
nedoriko 27 сентября 2013 в 02:21 0
я так понимаю это для 1.9? или 8?