Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Пользователь
Регистрация
15 Авг 2025
Сообщения
2
пацаны можете сказать. вот я делаю af, я хочу сделать так чтобы если админ подал форму то где принимать форму там создавался кейс формы подачи, если админ еще раз подал то создавался второй кейс подачи, если не поняли могу обьяснить что я от вас хочу
 
Пользователь
Регистрация
18 Июл 2025
Сообщения
225
2.20. Запрещено публиковать ответы, сгенерированные при помощи ChatGPT или аналогичных ИИ-моделей.

1. В админ-панели:​

Создай форум для кейсов:
Админка → Forums → Create new forum
Название: "Кейсы формы"
Type: Forum
Настрой права:
Только админы могут создавать темы
Пользователи видят только свои кейсы

2. Модификация формы (через Template modifications)

Добавь в шаблон формы (например, thread_create):
code:
<xf:if is="$formData.case_form">
  <xf:checkboxrow name="create_case" label="Создать кейс из этой формы" />
</xf:if>

3. PHP код для автоматического создания кейса

Создай файл src/addons/YourAddon/Listener.php:
code2:
<?php

namespace YourAddon\Listener;

use XF\Mvc\Entity\Entity;

class FormListener
{
    public static function threadEntityPostSave(\XF\Mvc\Entity\Entity $entity)
    {
        // Проверяем, что это новая тема и отмечена как кейс
        if ($entity->isInsert() && \XF::visitor()->is_admin)
        {
            $input = \XF::app()->request()->filter('create_case', 'bool');
            
            if ($input)
            {
                self::createCaseFromThread($entity);
            }
        }
    }
    
    protected static function createCaseFromThread(\XF\Entity\Thread $thread)
    {
        $forum = \XF::finder('XF:Forum')->where('node_id', 123)->fetchOne(); // ID форума кейсов
        
        $creator = \XF::service('XF:Thread\Creator', $forum);
        $creator->setContent(
            "Кейс формы #" . time(),
            "Создан из формы:\n\n" .
            "Автор: " . $thread->User->username . "\n" .
            "Тема: " . $thread->title . "\n" .
            "Ссылка: " . \XF::app()->router('public')->buildLink('canonical:threads', $thread) . "\n\n" .
            "---\n" . $thread->FirstPost->message
        );
        
        $creator->setIsAutomated();
        $creator->save();
        
        // Добавляем связь между формой и кейсом
        $thread->fastUpdate('case_id', $creator->getThread()->thread_id);
    }
}

4. Расширение через аддон

Создай полноценный аддон:

addon.json:

code3:
{
    "title": "Case Manager",
    "version_string": "1.0.0",
    "dev": "Ваше имя"
}

_output/class_extensions/XF/Entity/Thread.php:

code4:
<?php

namespace YourAddon\XF\Entity;

class Thread extends XFCP_Thread
{
    public function canCreateCase()
    {
        return \XF::visitor()->is_admin;
    }
}

если помог, ставь лайк и галочку решения)
 
Waiting for GTA VI
Профессионал
Регистрация
2 Ноя 2024
Сообщения
2,531

1. В админ-панели:​

Создай форум для кейсов:
Админка → Forums → Create new forum
Название: "Кейсы формы"
Type: Forum
Настрой права:
Только админы могут создавать темы
Пользователи видят только свои кейсы

2. Модификация формы (через Template modifications)

Добавь в шаблон формы (например, thread_create):
code:
<xf:if is="$formData.case_form">
  <xf:checkboxrow name="create_case" label="Создать кейс из этой формы" />
</xf:if>

3. PHP код для автоматического создания кейса

Создай файл src/addons/YourAddon/Listener.php:
code2:
<?php

namespace YourAddon\Listener;

use XF\Mvc\Entity\Entity;

class FormListener
{
    public static function threadEntityPostSave(\XF\Mvc\Entity\Entity $entity)
    {
        // Проверяем, что это новая тема и отмечена как кейс
        if ($entity->isInsert() && \XF::visitor()->is_admin)
        {
            $input = \XF::app()->request()->filter('create_case', 'bool');
           
            if ($input)
            {
                self::createCaseFromThread($entity);
            }
        }
    }
   
    protected static function createCaseFromThread(\XF\Entity\Thread $thread)
    {
        $forum = \XF::finder('XF:Forum')->where('node_id', 123)->fetchOne(); // ID форума кейсов
       
        $creator = \XF::service('XF:Thread\Creator', $forum);
        $creator->setContent(
            "Кейс формы #" . time(),
            "Создан из формы:\n\n" .
            "Автор: " . $thread->User->username . "\n" .
            "Тема: " . $thread->title . "\n" .
            "Ссылка: " . \XF::app()->router('public')->buildLink('canonical:threads', $thread) . "\n\n" .
            "---\n" . $thread->FirstPost->message
        );
       
        $creator->setIsAutomated();
        $creator->save();
       
        // Добавляем связь между формой и кейсом
        $thread->fastUpdate('case_id', $creator->getThread()->thread_id);
    }
}

4. Расширение через аддон

Создай полноценный аддон:

addon.json:

code3:
{
    "title": "Case Manager",
    "version_string": "1.0.0",
    "dev": "Ваше имя"
}

_output/class_extensions/XF/Entity/Thread.php:

code4:
<?php

namespace YourAddon\XF\Entity;

class Thread extends XFCP_Thread
{
    public function canCreateCase()
    {
        return \XF::visitor()->is_admin;
    }
}

если помог, ставь лайк и галочку решения)
OFFTOP

@pikamonov @Kolpak ответ чатом гпт

 
Сверху