【问题标题】:Typo3 tx_news extend with custom Fields - Content disappears sometimes, caching Issue?Typo3 tx_news 扩展自定义字段 - 内容有时会消失,缓存问题?
【发布时间】:2019-04-30 07:22:53
【问题描述】:

我使用的是 Typo3 9.5.5,并使用一些自定义字段扩展了扩展 tx_news。 前端和后端一切正常,但有时自定义内容会在前端消失并且不显示。调试也不显示内容。在我看来,这可能是缓存问题,因为在清除完整缓存后,自定义内容会再次显示。 我该如何解决这个问题?

我尝试将所需的模板放入我的自定义扩展中,但结果是一样的。


<?php

namespace myName\NewsExtend\Domain\Model;

/**
 * News model for default news
 *
 * @package TYPO3
 * @subpackage tx_news
 */
class NewsExtend extends \GeorgRinger\News\Domain\Model\News  {
  /**
   * @var string
   */
 protected $categoryHeader;

 /**
  * @var string
  */
protected $issue;

/**
 * Get categoryHeader
 *
 * @return string
 */
public function getCategoryHeader()
{
    return $this->categoryHeader;
}

/**
 * Set categoryHeader
 *
 * @param string $categoryHeader categoryHeader
 */
public function setCategoryHeader($categoryHeader)
{
    $this->categoryHeader = $categoryHeader;
}

/**
 * Get issue
 *
 * @return string
 */
public function getIssue()
{
    return $this->issue;
}

/**
 * Set issue
 *
 * @param string $issue issue
 */
public function setIssue($issue)
{
    $this->issue = $issue;
}

}

【问题讨论】:

  • 检查您的域模型。有@lazy 参数吗?你介意分享你的代码吗?
  • 感谢您的回复。请参阅我上面的代码。不,没有@lazy 参数。

标签: php model extend extbase tx-news


【解决方案1】:

使用新字段扩展 TYPO3 tx_news 的完整教程:

TypoScript 设置

plugin.tx_news {
    persistence {
        classes {
            GeorgRinger\News\Domain\Model\News {
                subclasses {
                    0 = Yourvendor\Yourext\Domain\Model\NewsDefault
                }
            }
            Yourvendor\\Domain\Model\NewsDefault {
                mapping {
                    tableName = tx_news_domain_model_news
                    recordType = 0
                }
            }
        }
    }
}

ext_tables.sql

CREATE TABLE tx_news_domain_model_news (
    new_field varchar(255) DEFAULT '' NOT NULL
);

TCA - typo3conf/ext/yourext/Configuration/TCA/Overrides/tx_news_domain_model_news.php

defined('TYPO3_MODE') or die();

/**
 * Add new fields to news table
 */
$tmpNewsColumns = [
    'new_field' => [
        'exclude' => 1,
        'label' => 'label or use localang file',
        'config' => [
            'type' => 'input',
            'size' => 30,
            'eval' => 'trim'
        ],
    ],
];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_news_domain_model_news', $tmpNewsColumns, true);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_news_domain_model_news', 'new_field', '', 'after:teaser');

添加模型 - typo3conf/ext/yourext/Classes/Domain/Model/NewsDefault.php

namespace Yourvendor\Yourext\Domain\Model;

use GeorgRinger\News\Domain\Model\NewsDefault as NewsFields;

class NewsDefault extends NewsFields {
    /**
     * the new_field
     * @var string
     */
    protected $newField;


    /**
     * Returns an array of orderings created from a given demand object.
     *
     * @param string $newField
     * @return void
     */
    public function setNewField($newField) {
        $this->newField = $newField;
    }
    /**
     * Get newField
     *
     * @return string
     */
    public function getNewField() {
        return $this->newField;
    }

}

在模板中找到并使用新字段,以检查&lt;f:debug&gt;{newsItem}&lt;/f:debug&gt; 中的typo3conf/ext/yourext/Resources/Private/Extensions/News/Partials/List/Item.html

【讨论】:

  • 后端可以使用它,但是前端缺少新字段。经过长时间的搜索,我找到了原因。您必须在 ext_localconf.php 中添加以下内容: $GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['classes']['Domain/Model/NewsDefault'][] = 'Yourext';不要忘记修改'yourext'。
【解决方案2】:

你有时会清除会触发的typo3temp吗

【讨论】:

  • 不,清除typo3temp 无效。我必须刷新完整的缓存才能再次显示内容。但一段时间后它又消失了。
  • 是的,我知道,但是清除typo3temp 可能会导致这种无效状态,因为在typo3temp 中,2 个类(一个ext:news 和一个来自你)合并在一起。还是您使用不同的缓存框架配置?
  • 非常感谢您的回答。我不知道。我想我没有缓存框架。我使用了这样的教程keinerweiss.de/…。如何激活缓存,包括与我的自定义扩展相结合的新闻扩展?
  • 对我的问题没有想法或解决方案?如果有解决方案将不胜感激。
  • 谢谢!这样做会缓存内容,这样它就不会在一段时间后消失。非常感谢您的帮助。
【解决方案3】:

我遇到了同样的问题。我使用了链接文档条目“ProxyClass generator”中的实现,当我在几个小时后返回页面时,字幕不再呈现。只有清除系统缓存才能将其恢复。

【讨论】:

    【解决方案4】:

    有点晚了,但我的问题出在 Typoscript 设置中。一个教程描述它必须是:

    config.tx_extbase {
    persistence {
        classes {
        GeorgRinger\News\Domain\Model\News {
          ....
        }
      }
     }
    

    但它必须是“plugin.tx_news”而不是“config.tx_extbase”:

     plugin.tx_news {
       ...
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多