Pimcore:从可编辑链接中检索文档或页面
Pimcore: Retrieving Documents or Pages from Editable Links
我正在尝试从 Pimcore 中的可编辑 link 中检索文档 Object 或页面 Object。根据 documentation,我可以访问以下方法:
getHref()
获取这个link的路径为STRING
getText()
获取 link 的文本为 STRING
getTarget()
获取 link 的目标为 STRING
getParameters()
获取 link 的查询参数为 STRING
getAnchor()
获取link的锚文本为STRING
getTitle()
获取 link 的标题为 STRING
getRel()
获取 link 的 rel 文本为 STRING
getTabindex()
获取 link 的 tabindex 作为 STRING
getAccessKey()
获取 link 的访问密钥为 STRING
isEmpty()
editable是否为空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; ?>
虽然这很适合创建锚点 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 方法。
我正在尝试从 Pimcore 中的可编辑 link 中检索文档 Object 或页面 Object。根据 documentation,我可以访问以下方法:
getHref()
获取这个link的路径为STRING
getText()
获取 link 的文本为STRING
getTarget()
获取 link 的目标为STRING
getParameters()
获取 link 的查询参数为STRING
getAnchor()
获取link的锚文本为STRING
getTitle()
获取 link 的标题为STRING
getRel()
获取 link 的 rel 文本为STRING
getTabindex()
获取 link 的 tabindex 作为STRING
getAccessKey()
获取 link 的访问密钥为STRING
isEmpty()
editable是否为空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; ?>
虽然这很适合创建锚点 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 方法。