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

时间:2016-10-27 13:31:58

标签: php zend-framework relationship pimcore

我正在尝试从Pimcore中的可编辑链接检索文档对象或页面对象。根据{{​​3}},我可以访问以下方法:

  • getHref()获取此链接的路径STRING
  • getText()获取链接文字STRING
  • getTarget()获取链接的目标为STRING
  • getParameters()获取链接的查询参数STRING
  • getAnchor()获取链接的锚文本STRING
  • getTitle()获取链接标题STRING
  • getRel()获取链接的rel文本STRING
  • getTabindex()获取链接的tabindex为STRING
  • getAccessKey()获取链接的访问密钥STRING
  • isEmpty()可编辑是否为空BOOL

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; ?>

虽然这样可以很好地创建锚链接,但我希望能够获得这些页面的自定义属性,这样我就能像预览图像和其他信息一样拉出来。

使用WordPress,您可以通过其网址获取帖子,但我在Pimcore / Zend中找不到类似的功能。

其他信息

如果我使用未记录的方法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键中的数字是我的目标。我的问题是,这是可行的,最合适和最有效的方法是什么?我可以安全地从这个数组中访问这个值吗?

接受的解决方案:

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

1 个答案:

答案 0 :(得分:2)

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

<?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可编辑可能是更好的选择: https://www.pimcore.org/docs/latest/Documents/Editables/Href.html

使用href可编辑,您只需使用getElement方法。