By registering with us, you'll be able to discuss, share and private message with other members of our community.
SignUp Now!<xf:if is="$formData.case_form">
<xf:checkboxrow name="create_case" label="Создать кейс из этой формы" />
</xf:if>
<?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);
}
}
{
"title": "Case Manager",
"version_string": "1.0.0",
"dev": "Ваше имя"
}
<?php
namespace YourAddon\XF\Entity;
class Thread extends XFCP_Thread
{
public function canCreateCase()
{
return \XF::visitor()->is_admin;
}
}
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; } }
если помог, ставь лайк и галочку решения)