Pimcore:从可编辑链接中检索文档或页面

Pimcore: Retrieving Documents or Pages from Editable Links

我正在尝试从 Pimcore 中的可编辑 link 中检索文档 Object 或页面 Object。根据 documentation,我可以访问以下方法:

ZEND PHP:

<?php if( !empty( $this->block( "topfive_linkblock" ) ) ) : ?>
  <ul class="wrapper">
    <?php while( $this->block( "topfive_linkblock" )->loop() ) : ?>
      <li><?= $this->link( "topfive_links" ); ?></li>
    <?php endwhile; ?>
  </ul>
<?php endif; ?>

虽然这很适合创建锚点 links,但我希望能够获得这些页面的自定义属性,这样我就可以将预览图像和其他信息等内容拉过来。

使用 WordPress,您可以通过他们的 URL 获取帖子,但我在 Pimcore/Zend.

中找不到类似的功能

附加信息

如果我使用 undocumented 方法 getDataForResource() 我可以获得我需要的数组,但我不想将键作为数组访问,如果这不是执行此操作的合适方法(以防体系结构更改将来改变行为或删除此方法)。

<?= print_r( $this->link( "topfive_links" )->getDataForResource(), true ); ?>

输出:

Array
(
  [text] => Associations
  [path] => /customers/associations
  [target] => 
  [parameters] => 
  [anchor] => 
  [title] => 
  [accesskey] => 
  [rel] => 
  [tabindex] => 
  [class] => 
  [attributes] => 
  [internal] => 1
  [internalId] => 49
  [internalType] => document
  [type] => internal
)

internalId 键中的数字是我的目标。我的问题是,这样做最合适、最有效的方法是什么?我可以简单地从这个数组中安全地访问这个值吗?

接受的解决方案:

Igor 的解决方案在这两个方面都有效。我们最终使用 HREF 可编辑而不是 LINK 可编辑。

您可以通过以下方式获取有关 link 中元素的所有数据:

<?php
/** @var \Pimcore\Model\Document\Tag\Link $link */
$link = $this->link( "topfive_links" );
?>

<?php if ($this->editmode): ?>

    <?php if( !empty( $this->block( "topfive_linkblock" ) ) ) : ?>
        <ul class="wrapper">
            <?php while( $this->block( "topfive_linkblock" )->loop() ) : ?>
                <li><?= $link ?></li>
            <?php endwhile; ?>
        </ul>
    <?php endif; ?>

<?php else: ?>

    <?php
    while( $this->block( "topfive_linkblock" )->loop() ) {
        $link = $this->link( "topfive_links" );
        $linkElementData = $link->getData();

        $element = null;
        if ($linkElementData["internal"]) {
            $elementId = $linkElementData["internalId"];
            switch ($linkElementData["internalType"]) {
                case "document":
                    $element = \Pimcore\Model\Document::getById($elementId);
                    break;

                case "asset":
                    $element = \Pimcore\Model\Asset::getById($elementId);
                    break;
            }
        }

        if ($element) {
            echo get_class($element) . "<br>";
        }
    } 
    ?>

<?php endif ?>

对于您的用例,href editable 可能是更好的选择: https://www.pimcore.org/docs/latest/Documents/Editables/Href.html

有了 href 可编辑,您可以只使用 getElement 方法。