TYPO3新闻记录的前端编辑(ext:frontend_editing)

时间:2018-10-17 15:54:10

标签: typo3 tx-news

我正在尝试为新闻记录(ext:news)激活新的前端编辑(ext:frontend_editing)。编辑部分运行良好,但是我无法在前端添加新的新闻记录。

我正在按照manual中的步骤进行操作,然后出现“自定义记录”部分,但是现在该怎么办?有人可以描述需要传递给手册中介绍的方法wrapContentWithDropzone()的值吗?

/**
 * @param string $content Empty string (no content to process)
 * @param array $conf TypoScript configuration
 * @return string $content
 */
 public function wrapWithDropZone($content, $conf)
 {
      if (GeneralUtility::_GET('frontend_editing') && GeneralUtility::makeInstance(AccessService::class)->isEnabled()) {
           $wrapperService = GeneralUtility::makeInstance(ContentEditableWrapperService::class);

           $content = $wrapperService->wrapContentWithDropzone(
                'tt_content', // table name
                0, // page uid, pid
                $content,
                0 // colPos
           );
      }

      return $content;
 }

感谢任何帮助或朝着正确的方向前进!谢谢!

更新

我意识到,上面的代码在页面的最底部添加了一个放置区域。但是此放置区仅对“普通”内容元素有反应,而对我新添加的自定义元素无反应。 当我将方法“ wrapContentWithDropzone()”的第一个值更改为“ tx_news_domain_model_news”时,无论放置了哪个元素,此放置区都将创建新的新闻记录。

因此,我仍在寻找一种方法来激活自定义记录,以便最好在存储文件夹上添加新的新闻记录。

2 个答案:

答案 0 :(得分:1)

经过调试后,我自己找到了答案:

请勿使用方法“ wrapContentWithDropzone()”,而应使用“ wrapContentWith 自定义 Dropzone()”。

这是我的代码:

打字稿:

plugin.tx_frontendediting {
    customRecords {
        10 {
            table = tx_news_domain_model_news
            pid = 6
        }
    }
}

page = PAGE
page.1001 = USER
page.1001 {
    userFunc = Vendor\Extension\UserFunc\FrontendEditing->addNewsDropZone
}

用户功能:

<?php
namespace Vendor\Extension\UserFunc;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\FrontendEditing\Service\AccessService;
use TYPO3\CMS\FrontendEditing\Service\ContentEditableWrapperService;

class FrontendEditing {

    /**
     * @param string $content Empty string (no content to process)
     * @param array $conf TypoScript configuration
     * @return string $content
     */
    public function addNewsDropZone($content, $conf)
    {
        if (GeneralUtility::_GET('frontend_editing') && GeneralUtility::makeInstance(AccessService::class)->isEnabled()) {
            $wrapperService = GeneralUtility::makeInstance(ContentEditableWrapperService::class);

            $content = $wrapperService->wrapContentWithCustomDropzone(
                'tx_news_domain_model_news', // table name of the record you want to create
                $content,
                // additional fields if needed
                [
                    //'title' => 'default title'
                ],
                6 // page uid of the page where you want to store the news records
            );
        }

        return $content;
     }
}

这将在每个页面的最底部添加一个放置区域,可以在其中放置类型为“ tx_news_domain_model_news”的自定义元素。记录将存储在方法“ addNewsDropZone()”中定义的页面上,对于我来说,该页面的uid = 6。

答案 1 :(得分:1)

您可以在模板中的任何位置使用它:

<core:customDropZone tables="{0:'tx_news_domain_model_news'}" pageUid="{settings.startingpoint}"></core:customDropZone>

但是,如果使用settings.startingpoint,请务必在插件中设置storagePid。

使用以下印刷文字,您可以为要插入新新闻记录的特定页面启用新闻记录:

plugin.tx_frontendediting{
    customRecords {
        10 {
            table = tx_news_domain_model_news
            pid = 142,154
        }
    }
}