Pimcore: получение документов или страниц по редактируемым ссылкам

Я пытаюсь получить объект документа или объект страницы из редактируемой ссылки в Pimcore. Согласно документации, у меня есть доступ к следующим методам:

  • getHref() Получить путь этой ссылки как STRING
  • getText() Получить текст ссылки как STRING
  • getTarget() Получить цель ссылки как STRING
  • getParameters() Получить параметры запроса ссылки как STRING
  • getAnchor() Получить якорный текст ссылки как STRING
  • getTitle() Получить заголовок ссылки как STRING
  • getRel() Получить относительный текст ссылки как 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 вы можете получать сообщения по их URL-адресам, хотя я не смог найти подобную функцию в 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.


person MLK.DEV    schedule 27.10.2016    source источник


Ответы (1)


Вы можете получить все данные об элементе в редактируемой ссылке следующим образом:

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

person Igor Benko    schedule 27.10.2016
comment
Отлично, я попробую это и вернусь к вам. Спасибо! - person MLK.DEV; 27.10.2016
comment
Работает отлично. Спасибо. - person MLK.DEV; 27.10.2016
comment
Рад, что смог помочь! - person Igor Benko; 27.10.2016