Нужно подписать некоторых пользователей, на определённую категорию, определённого контента.

#1 18 августа 2022 в 23:25

Вообщем задача сформирована в теме. И сделать нужно это по быстрому. Самый быстрый способ, это в базу пользователей руками подписать, в таблице cms_subscriptions_bind, но там есть столбец confirm_token и я не знаю на что это влияет.

Поэтому решил попробовать простой action написать, в контроллере Users. Но не работает.

  1. <?php
  2. class actionUsersAddconaddsub extends cmsAction {
  3. public function run(){
  4. if (!$this->cms_user->is_admin) { cmsCore::error404(); }
  5. $subscriptions = cmsCore::getModel('subscriptions');
  6.  
  7. $addsubuser = [1,2];
  8.  
  9. foreach($addsubuser as $addsub){
  10. $target["title"] = "Статьи";
  11. $target["subject_url"] = '/articles/';
  12.  
  13. $subscribe['user_id'] = $addsub;
  14. $subscribe['confirm_token'] = string_random(32, $addsub);
  15.  
  16. if(!$subscriptions->isSubscribed($target, $subscribe)){
  17. $subscriptions->subscribe($target, $subscribe);
  18. }
  19. }
  20. }
  21. }
  22.  

Help! Хоть как-нибудь!

#2 19 августа 2022 в 08:01

Видимо в вашем $target не хватает данных. Например для этой ссылки site.ru/articles/astronomija нужны

  1. [controller] => content
  2. [subject] => articles
  3. [params] => Array
  4. (
  5. [filters] => Array
  6. (
  7. [0] => Array
  8. (
  9. [field] => category_id
  10. [condition] => eq
  11. [value] => 2
  12. )
  13.  
  14. )
  15.  
  16. )
  17. [hash] => 1f10bf5f0445200865413bfa4806c5e0
  18. [title] => Статьи &mdash; астрономия
  19. [subject_url] => articles/astronomija

 а в $subscribe нужны эти

  1. [user_id] => 1
  2. [confirm_token] => 65a93f9bec3d04946da21aa562513e2b
#3 19 августа 2022 в 11:24

 а в $subscribe нужны эти

  1. [user_id] => 1
  2. [confirm_token] => 65a93f9bec3d04946da21aa562513e2b
Loadырь

Ну так они же есть

  1. $subscribe['user_id'] = $addsub;
  2. $subscribe['confirm_token'] = string_random(32, $addsub);

Вот кстати сама функция subscribe, из контроллера subscriptions

  1. public function subscribe($target, $subscribe) {
  2. $is_now_create_list = false;
  3. if(empty($target['hash'])){
  4. $target['hash'] = md5(serialize($target));
  5. }
  6. // проверяем, нет ли такого списка
  7. $subscribe['subscription_id'] = $this->filterEqual('hash', $target['hash'])->getFieldFiltered('subscriptions', 'id');
  8. // создаём список
  9. if(!$subscribe['subscription_id']){
  10. $subscribe['subscription_id'] = $this->insert('subscriptions', $target, true);
  11. $is_now_create_list = $subscribe['subscription_id'];
  12. }
  13. $sid = $this->insert('subscriptions_bind', $subscribe);
  14. $this->reCountSubscribers($subscribe['subscription_id']);
  15. return array($is_now_create_list, $sid);
  16. }
#4 19 августа 2022 в 12:58

 Vladimir, да они есть, но я к тому, что у вас, вероятно, срабатывает это условие

  1. if(!$subscriptions->isSubscribed($target, $subscribe)){

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

#5 24 августа 2022 в 15:44

Ааа, столько время на это уходит. При том, я знаю есть люди, у которые на всю мою задачу наверное ушло бы, несколько минут) 

Вообщем, переписал немного код, и ура! Подписчики начали попадать в базу. НО, я не вижу, что-бы в счётчике на странице подписки изменилось число, как будто нет новых подписчиков. Как это исправить???!!! Вот новый код:

  1. $subscriptions = cmsCore::getModel('subscriptions');
  2. $target = array (
  3. // "hash" => "md5(serialize($target)",
  4. "title" => "Новости",
  5. "subject_url" => "news",
  6. "controller" => "content",
  7. "subject" => "news",
  8. "params" => "[]",
  9. );
  10. $subscribe = array (
  11. "user_id" =>"1",
  12. "confirm_token" => "string_random(32, 'test@test.ru')",
  13. );
  14. $subscriptions->subscribe($target, $subscribe);

И передаю всё это дело из экшена в шаблон, я так:

  1. $template = cmsTemplate::getInstance();
  2. $template->render('index', array(
  3. 'subscriptions' => $subscriptions
  4. )
  5. );

И вывожу это дело в шаблоне так, (я знаю, далеко не лучший способ, можете подсказать лучше! Мне просто нужно хотя-бы увидеть, что код отработал без ошибок):

  1. print_r($subscriptions);

Всё-таки, что-то не то. Отписаться не получается. 

#6 27 августа 2022 в 16:59

Сделано!

Заливаю в виде компонента, но здесь всё делается в коде в экшене index.php, поэтому смотрите, старался нужные строки комментировать, в таблице users должен быть столбец unsubscribe со значением по умолчанию Null. Может кому пригодится. Если ставите, то ставите на свой страх и риск. 

Компонент подписывает пользователей на контент определённой категории, пользователей добавивших определённый контент в определённую категорию.

После выполнения всех настроек, необходимо перейти по адресу вашсайт.ru/vao

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

Прикрепленный файл
wesubscribe.zip 5 Кб
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.