Silverstripe 3.1.x getting values from Parent

筅森魡賤 提交于 2019-12-13 04:53:11

问题


I would like to get a generic function working for getting Data in Template of a Page and if the property is not set, getting it from the Parent or Parents Parent and so on. With generic I mean independent of Relations like db, HasOne, HasMany, ManyMany. Let's say I have this for ManyMany but would like to detect if it's a Object, HasManyList or ManyManyList or a value. Is anything like this built in or how would you go about?

function ManyManyUpUntilHit($ComponentName){
  $Component = $this->getManyManyComponents($ComponentName);
  if($Component && $Component->exists())
  return $Component;
  $Parent = $this->Parent();
  if(is_object($Parent) && $Parent->ID != 0){
    return $Parent->ManyManyUpUntilHit($ComponentName);
  } else {
    return null;
  }
}

in template:

$ManyManyUpUntilHit(Teaser)

回答1:


There is no in built method to do this in Silverstripe. You will need to write your own function to do this.

Here is an example to get a page's has_one, has_many or many_many resource by parameter, or go up the site tree until a resource is found, or we hit a root page:

function getComponentRecursive($componentName) {

    // has_one
    if ($this->has_one($componentName)) {
        $component = $this->getComponent($componentName);
        if (isset($component) && $component->ID)
        {
            return $component;
        }
    }

    // has_many
    if ($this->has_many($componentName)) {
        $components = $this->getComponents($componentName);
        if (isset($components) && $components->count())
        {
            return $components;
        }
    }

    // many_many
    if ($this->many_many($componentName)) {
        $components = $this->getManyManyComponents($componentName);
        if (isset($components) && $components->count())
        {
            return $components;
        }
    }

    if ($this->ParentID != 0)
    {   
        return $this->Parent()->getComponentRecursive($componentName);
    }

    return false;
}


来源:https://stackoverflow.com/questions/19955973/silverstripe-3-1-x-getting-values-from-parent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!