2015-04-06 3 views
1

Я хотел бы знать, как настроить это загрузочное поле, чтобы перейти из таблицы $ belongs_many_many Act.Silverstripe: get var from many_many relationship custom upload

Часть кода ....

<? 

class MultipleBlock extends DataObject { 

    private static $db = array(
     'Act' => 'Varchar', 


    private static $many_many = array(
     'MultipleBlockColumns' => 'MultipleBlockColumn' 
    ); 


} 

class MultipleBlockColumn extends DataObject { 

    static $belongs_many_many = array(
     'MultipleBlocks' => 'MultipleBlock' 
    ); 
    private static $has_one = array(
     'Image' => 'Image', 
    ); 

    $fields->addFieldToTab('Root.Image',$uploadField = new UploadField(
       $name = 'Image', 
       $title = 'Image' 
      )  
     ); 

    enter code here 
    $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$var); 

} 

Я пробовал эти методы, чтобы получить Закон переменной, но ничего не появляется:

$var=$this->Parent->MultipleBlocks->Act; 
$var=$this->many_many(MultipleBlocks)->Act; 
$var=$this->Parent->Act; 

Любая идея? Спасибо заранее!

ответ

0

Wow ... через несколько дней, и обучения SilverStripe немного больше, я нашел мое решение. Для достижения MultiBlocks из колонки Multiblock это:

parent::MultipleBlocks(); 

сделать мой сохранить в папку настройки, есть мой код ... Он работает отлично. Идентификатор MultiBlockColumns должен быть создан первым.

$parent = parent::MultipleBlocks(); 
      $uploadField->setFolderName('Uploads/Subsite'.Subsite::currentSubsiteID().'/images/'.$parent['MultipleBlock']->Act); 

Вот и все! Спасибо, что представили идею.

0

Если я правильно читаю ваш код, причина, по которой вы не можете получить доступ к переменной Act, связана с тем, что вы не выполняете итерацию через отношение MultipleBlocks. Образец, как получить переменную Act для соответствующей MultipleBlocks будет выглядеть следующим образом (в пределах файла шаблона/макета):

<% loop $MultipleBlocks %> 
$Act 
<% end_loop %> 

В PHP это будет что-то вдоль линий:

$multipleBlocks = $this->MultipleBlocks(); 
foreach($multipleBlocks as $block){ 
    $act = $block->Act; 
} 

Когда вы ссылаетесь на MultipleBlocks, как вы это делали в $this->MultipleBlocks->Act, это не сработает, так как MultipleBlocks - это много отношений, поэтому на самом деле это DataList, а не отдельный объект.

Update

Вот пример has_many/has_one:

class MultipleBlock extends DataObject { 

    private static $db = array(
     'Act' => 'Varchar', 
    ); 


    private static $has_many = array(
     'MultipleBlockColumns' => 'MultipleBlockColumn' 
    ); 


} 

class MultipleBlockColumn extends DataObject { 

    private static $has_one = array(
     'MultipleBlock' => 'MultipleBlock' 
    ); 
    private static $has_one = array(
     'Image' => 'Image', 
    ); 

    public function getBlockAct(){ 
     return $this->MultipleBlock()->Act; 
    } 

} 
+0

Пример php показывает только, как выполнить цикл через блоки и получить доступ к переменной «Act». Он не обрабатывает ничего, чтобы отображать его в шаблоне/макете. – muskie9

+0

Если я понимаю ... Это невозможно сделать. Но, если у отношения было много и есть один, вы думаете, что мне удастся получить переменную таблицы Act с помощью $ this-> MultipleBlocksID-> Act? Не получать переменную для шаблонов, а настраивать для поля загрузки. – StefGuev

+0

Если ваш MultipleBlock has_many MultipleBlockColumns и has_one идут другим путем, вы можете сделать '$ yourMultipleBlockColumns-> MultipleBlockRelationName() -> Act', чтобы получить эту переменную. Я обновил свой выше ответ, чтобы показать, как это будет сделано более полно. – muskie9