Drop down menu 具体5.7.5.2-如何将主题树属性值放入选择框?

Drop down menu 具体5.7.5.2-如何将主题树属性值放入选择框?,drop-down-menu,tree,attributes,concrete5-5.7,Drop Down Menu,Tree,Attributes,Concrete5 5.7,我有一个主题树,用作页面上的属性: 类别- -主题1 -话题2 -专题3 如何将主题放入块中的数组中?然后我可以在选择框中使用它?e、 g $topics = ("Topic 1", "Topic 2", "Topic 3); echo $form->select('categories', $topics); 如果我的选择框位于页面的最右边,它总是缺少右边框。如果我把它移到其他地方,它会显示很好。还有人有这个吗 顺便说一句,对于希望从“选择框”属性获取值的用户: use Concret

我有一个主题树,用作页面上的属性:

类别-
-主题1
-话题2
-专题3

如何将主题放入块中的数组中?然后我可以在选择框中使用它?e、 g

$topics = ("Topic 1", "Topic 2", "Topic 3);
echo $form->select('categories', $topics);
如果我的选择框位于页面的最右边,它总是缺少右边框。如果我把它移到其他地方,它会显示很好。还有人有这个吗

顺便说一句,对于希望从“选择框”属性获取值的用户:

use Concrete\Core\Attribute\Key\CollectionKey as CollectionKey;
use Concrete\Attribute\Select\Controller as SelectController;
use Concrete\Core\Attribute\Type as AttributeType;

$ak = CollectionKey::getByHandle('region');
$at = AttributeType::getByHandle('select');
$satc = new SelectController($at);
$satc->setAttributeKey($ak);   
$values = $satc->getOptions()->getOptions();
foreach ($values as $key => $value) {
    $this->options[$value->getSelectAttributeOptionID()] = $value->getSelectAttributeOptionValue();
}
多谢各位

[已解决]
感谢Mike,这里有一段工作代码:

use Concrete\Core\Tree\Type\Topic as TopicTree;  
public $category = array('');

public function view() {
...
    $this->requireAsset('core/topics');  
    $tt = new TopicTree();  
    $tree = $tt->getByName('My Categories');  
    $node = $tree->getRootTreeNodeObject();  
    $node->populateChildren();  
    if (is_object($node)) {  
        foreach($node->getChildNodes() as $key => $category) {  
            if ($category instanceof \Concrete\Core\Tree\Node\Type\Topic) {  
                $this->category[$category->getTreeNodeDisplayName()] = $category->getTreeNodeDisplayName();  
            }  
        }  
    }  
...
}

您可以在块控制器中执行类似操作

private function getTopics($topicTreeName)
{
    $this->requireAsset('core/topics');
    $tt = new TopicTree();
    /** @var Topic $tree */
    $tree = $tt->getByName($topicTreeName);
    /** @var TopicCategory $node */
    $node = $tree->getRootTreeNodeObject();
    $node->populateChildren();
    $topics = [];

    /** @var Concrete/Core/Tree/Node/Type/Topic $topic */
    foreach ($node->getChildNodes() as $topic) {
        if ($topic instanceof \Concrete\Core\Tree\Node\Type\Topic) {
            $topics[] = [
              'id'   => $topic->getTreeNodeID(),
              'name' => $topic->getTreeNodeDisplayName(),
            ];
        }
    }

    return $topics;
}
这将为您提供一系列主题及其Id(我想您可能希望选择选项的值为Id),如下所示

[[name=>'Topic 1', id => 1], [name=>'Topic 2', id => 2]..etc.]
…然后在视图函数中设置变量,使其在视图模板中可用

public function view() {
  $topics = $this->getTopics('My topic name');
  $this->set('topics', $topics);
}
然后,您可以迭代模板中的主题以输出选择列表


希望这对如何获取主题列表有所帮助?

Mike,非常感谢!!!成功了。非常感谢。我已经用工作代码更新了我的问题。