| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | <?php/** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */namespace yii\base;/** * DynamicContentAwareTrait implements common methods for classes * which support a [[View]] dynamic content feature. * * @author Sergey Makinen <sergey@makinen.ru> * @since 2.0.14 */trait DynamicContentAwareTrait{    /**     * @var string[] a list of placeholders for dynamic content     */    private $_dynamicPlaceholders;    /**     * Returns the view object that can be used to render views or view files using dynamic contents.     * @return View the view object that can be used to render views or view files.     */    abstract protected function getView();    /**     * {@inheritdoc}     */    public function getDynamicPlaceholders()    {        return $this->_dynamicPlaceholders;    }    /**     * {@inheritdoc}     */    public function setDynamicPlaceholders($placeholders)    {        $this->_dynamicPlaceholders = $placeholders;    }    /**     * {@inheritdoc}     */    public function addDynamicPlaceholder($name, $statements)    {        $this->_dynamicPlaceholders[$name] = $statements;    }    /**     * Replaces placeholders in $content with results of evaluated dynamic statements.     * @param string $content content to be parsed.     * @param string[] $placeholders placeholders and their values.     * @param bool $isRestoredFromCache whether content is going to be restored from cache.     * @return string final content.     */    protected function updateDynamicContent($content, $placeholders, $isRestoredFromCache = false)    {        if (empty($placeholders) || !is_array($placeholders)) {            return $content;        }        if (count($this->getView()->getDynamicContents()) === 0) {            // outermost cache: replace placeholder with dynamic content            foreach ($placeholders as $name => $statements) {                $placeholders[$name] = $this->getView()->evaluateDynamicContent($statements);            }            $content = strtr($content, $placeholders);        }        if ($isRestoredFromCache) {            $view = $this->getView();            foreach ($placeholders as $name => $statements) {                $view->addDynamicPlaceholder($name, $statements);            }        }        return $content;    }}
 |