Хак для icms2. Публикация гостями материалов.

+33
6.36K
Итак, разрешим гостям публиковать материал.
Не буду заимствовать сторонние модули, а поправлю пару строчек (в двух файлах) чтобы гости смогли публиковаться.
Правки делались на "коленке" но работают.

Вся это делается для Instant Cms 2.

Открываем /system/controllers/content/actions/item_add.php и заменяем строчку номер 13 на

  1. if (!cmsUser::isAllowed($ctype_name, 'add') && $ctype_name != 'pages') { cmsCore::error404(); }

тем самым мы указываем что если в компоненте "pages" незарегистрированный пользователь захочет зайти на страницу добавления материала как незарегистрированный пользователь, то система ему не откажет и пропустит дальше незарегистрированного пользователя



Тут же после страницы 213:
  1. if ($back_url){
  2. $this->redirect($back_url);
  3. } else {
вставляем строчку:
  1. if ($ctype_name == 'pages' && !$user->id) { $ctype_name = 'pages'; $item['slug'] = 'stranica'; }
и тут мы системе объясняем, что если мы работаем с контентом "pages" и пользователя определить не возможно то после опубликования переси нас на страницу "stranica.html", потому, что мы не авторизованный пользователь, и если перенести нас на опубликованную страницу то нам покажет "404" (если в настройках стоит премодерация).
Потом открываем файл: /system/controllers/content/model.php и заменяем строчку номер 1140 на:
  1. if ($user->id) { $item['user_id'] = $user->id; } else { $item['user_id'] = 13; }
где говорится, что если пользователя определить нельзя, то пусть это будет пользователь с id=13 которого мы заранее зарегистрировали в нужной группе с нужными правами.

и тут же стройку 1158
  1. $folder_id = $this->addContentFolder($ctype['id'], $user->id, $item['new_folder']);
меняем на
  1. $folder_id = $this->addContentFolder($ctype['id'], $item['user_id'], $item['new_folder']);
Дальше, если не зарегистрированный пользователь захочет добавить контент "pages" то по ссылке /pages/add ему не будет показываться страница 404 а будет показываться полноценная страница, а после добавления будет перебрасывать на страницу /pages/stranica.html (это можно тут же поменять), которую надо создать и написать на ней например "Материал добавлен, и после проверки будет опубликован."

Тут две главных переменных, от кого публковать материал и в каком типе материала использовать.

Тестирова на стандартных типах контента — работает. Если что отпишитесь.
Думаю 3 правки это не страшно для работы.

Долго искал решение пришлось придумать самому.
Если кому помог вот контейнер для любых количеств спасибок: photostake.ru/shop/14.html
+1
Сергей Сергей 9 лет назад #
Потом открываем файл: /system/controllers/content/model.php и заменяем строчку номер 1440 на: Что конкретно меняем, код какой? У меня видимо строки не совпадают.
+1
Kreator Kreator 9 лет назад #
Было:
Код PHP:
  1. $item['user_id'] = $user->id;
Стало:
Код PHP:
  1. if ($user->id) { $item['user_id'] = $user->id; } else { $item['user_id'] = 13; }
0
Kreator Kreator 9 лет назад #
Правильно вы не нашли той строки. Меняем строку номер 1140. Ошибся. Описание исправил.
+1
Сергей Сергей 9 лет назад #
Сделал для places, работает, а вот для нескольких типов контента не вышло. В item_add.php строки продублировал с другими названиями типа контента, фиг там, схитрить не удалось ха-ха.
+1
Kreator Kreator 9 лет назад #
Делайте так:
Код PHP:
  1. if (!cmsUser::isAllowed($ctype_name, 'add') && ($ctype_name != 'pages' || $ctype_name != 'places')) { cmsCore::error404(); }
Код PHP:
  1. if (($ctype_name == 'pages' || $ctype_name != 'places') && !$user->id) { $ctype_name = 'pages'; $item['slug'] = 'stranica'; }
Это строки где встречается тип контента.
Не проверял, должно работать. Нужно больше перечисляйте дальше через ||
+1
Сергей Сергей 9 лет назад #
О, спасибо! dance Как раз думал, что между перечисленным воткнуть.
+1
Kantona Kantona 9 лет назад #
Большое спасибо!) Поставил на своем сайте для добавления рецептов) http://kantona.ru/
+1
Brut Brut 9 лет назад #
И теперь ели добавят контент, будет считаться что его добавил пользователь с id 13, и отображаться в контенте?
+2
Kreator Kreator 9 лет назад #
Ну да. Вы поменяйте 13 на другого своего.
Я создал пользователя с логином "Гость" и указал его id
+1
o5Tolik o5Tolik 9 лет назад #
Я так понимаю любой контент может гость добовлять, да?
+1
Kreator Kreator 9 лет назад #
Почитайте внимательно описание, там встречаются такие строки:
Код PHP:
  1. if ($ctype_name == 'pages' && !$user->id)
так вот тут pages - Тип контента. Добавьте своих условий для другого типа контента.
+1
o5Tolik o5Tolik 9 лет назад #
А всё, теперь понял. Спасибо.
+1
o5Tolik o5Tolik 9 лет назад #
Вместо pages прописал board, но гости всё равно не могут публиковать объявления. Почему?
+1
fanat21 fanat21 9 лет назад #
Меня тоже это интересует, кто знает?
+1
wonderer22 wonderer22 9 лет назад #
Поменял на board, создал страницу stranica.html, вроде все работает.
Но только начал, буду дальше тестировать
+2
Фёдор Фёдор 9 лет назад #
можно только новость добавить. объявление не могу
+2
ph3no ph3no 8 лет назад #
Для 2.3.0 не получается сделать, строки не совпадают )))))
+6
Михаил Михаил 8 лет назад #
С позволения автора напишу чем отличается хак версии 2.5.0.
Все правки делаем так как описал автор кроме:
Kreator:
Потом открываем файл: /system/controllers/content/model.php и заменяем строчку номер 1140 на: Код PHP: if ($user->id) { $item['user_id'] = $user->id; } else { $item['user_id'] = 13; } где говорится, что если пользователя определить нельзя, то пусть это будет пользователь с id=13 которого мы заранее зарегистрировали в нужной группе с нужными правами.
Тут мы так же открываем файл: /system/controllers/content/model.php и после 1405 строки:
Код PHP:
  1. $item['user_id'] = empty($item['user_id']) ? cmsUser::getInstance()->id : $item['user_id'];
вставляем вот такой код:
Код PHP:
  1. if (!cmsUser::isLogged())
  2. {
  3. $item['user_id'] = 2;
  4. }
По поводу части:
и тут же стройку 1158 Код PHP: $folder_id = $this->addContentFolder($ctype['id'], $user->id, $item['new_folder']); меняем на Код PHP: $folder_id = $this->addContentFolder($ctype['id'], $item['user_id'], $item['new_folder']);
Ничего не делаем, так как в этой версии и так стоит нужная нам переменная $item['user_id'].
Всё.
Ещё сильно не тестил, но вроде работает. Если у кого время будет потестить посмотрите пожалуйста у меня. Если увидите что что-то не так работаете напишите самому интересно.
+1
Сергей Сергей 8 лет назад #
При много благодарен, как раз собрался прикручивать к одному проекту.
+1
Oleg_z75 Oleg_z75 8 лет назад #
Доброго времени суток!
Удалось ли кому то реализовать данную функцию для объявлений?
+1
Def Def 8 лет назад #
а можно как то разрешить этому гостю писать на стене пользвателя?
+1
Скела Скела 8 лет назад #
Было ли решения для добавления объявлений?
+1
Def Def 7 лет назад #
на 2.7 такое должно работать?
+1
Def Def 7 лет назад #
проверил, на 2.7.1 работает:)
+1
o5Tolik o5Tolik 7 лет назад #
Для объявлений работает?
0
Kreator Kreator 7 лет назад #
Работает. Но данное решение актально для icms версии того времени (2 года назад), актуальное решение в компоненте:
+1
Radu Radu 7 лет назад #
У меня строки не совпадают, можно просто поменять файлы? если конечно поделитесь ими для версии 2.7.1?
0
Mari Mari 7 лет назад #
Сделала для объявлений на 2.7.2. После добавлением объявления гостем, оно не отображается в модерации, то есть,

как видно на скрине, оно есть но, для модерации оно не открывается.
Как решить данную проблему?
0
0
sindoyun sindoyun 7 лет назад #
Для 2.8.2 подходит? по строкам непонятки!
+1
al955 al955 6 лет назад #
Будет ли работать на 2.9.0?
0
Kreator Kreator 6 лет назад #
Думаю что нет
0
PiBot PiBot 6 лет назад #
Все работает, только место расположение строчек изменилось и добавилось еще несколько. Наверное Kreator не хочет давать эту информацию теперь бесплатно smile Я его понимаю.
+1
Vyacheslav Vyacheslav 6 лет назад #
Для 2.10.1 актуально, строки конечно сдвинулись, но файлы для правок те же, спасибо.
Если по беспределу гостям руки развязывать, и разрешить еще и фото загружать, то правил файл - system/controllers/images/frontend.php, функция - actionUpload
0
SmartControl SmartControl 6 лет назад #
Можно и без единой правки разрешить публикации гостями и настроить индивидуально для каждого типа контента пользователя от которого будут появляться записи - компонент в каталоге. Но чтобы фотки разрешить, то придется хакнуть как вы написали.. без этого никак, средствами системы не решить сейчас.

Еще от автора

Поле - Дата публикации записи
Дата публикации записи в шаблоне выводится в конце записи.
Статистика просмотров контента и Фильтр исходящей почты (SiteKreator v.22.2.2)
Улучшение компонента продолжается. Медленно но верно компонент обрастает еще большими возможностями.
Kmailer v.3.3.1 - Компонент для организации рассылки по email пользователям сайта и подписчикам
Всем доброго времени суток. Представляю вашему вниманию компонент KMailer 3.3.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.