2014-06-12 67 views
0

我需要根據分類法創建新的促銷規則:例如,對於具有特定分類羣的所有產品(不是全部訂單),可享受10%的折扣。Sylius:創建基於分類學的促銷

我閱讀文檔,閱讀sylius附帶的兩個規則(項目數量和訂單總數)的代碼。我開始創建一個新的規則檢查器(目前它只返回true),所以現在我有第三個提升規則可用(「分類法」)。然後我創建了它的配置表單類型。在這裏,我需要創建一個選擇列出所有配置的分類單元,以便能夠選擇哪個分類單元觸發推廣。在這裏我被困住了。我試圖TaxonomyConfigurationType.php(我注入實體管理器):

class TaxonomyConfigurationType extends AbstractType 
{ 

protected $em; 

public function __construct($em) 
{ 
    $this->em = $em; 
} 

/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('theme', 'choice', 
     array(
      'mapped' => false, 
      'multiple' => false, 
      'empty_value' => 'Choose a taxon', 
      'choices' => $this->buildThemeChoices() 
     ) 
    ); 
} 

public function getName() 
{ 
    return 'ecad_promotion_rule_taxonomy_configuration'; 
} 

protected function buildThemeChoices() { 

    $choices = array(); 

    /// how can I access the taxonomy repo ? 
    $r = $this->em->getRepository('BoutiqueBundle:Theme'); 
    $entities = $r->findAll(); 

    foreach ($entities as $e) { 
     $choices[$e->getId()] = $e->getName(); 
    } 

    return $choices; 
} 
} 

我重寫類羣類(BoutiqueBundle:主題)爲了翻譯我的分類羣,所以我得到這個錯誤:

Class "Ecad\BoutiqueBundle\Entity\Theme" sub class of "Sylius\Bundle\TaxonomiesBundle\Model\Taxon" is not a valid entity or mapped super class. 

任何導致實現這一目標?最後,我需要在$配置中存儲分類標識,以便能夠檢查產品是否符合條件。

另一件事:是否有可能只指定一個產品作爲促銷主題?

感謝

回答

0

確定我的錯......

對於那些有興趣,我現在已經基於分類學一個新的提升規則(我想用所謂的「Thematique」特定詞彙):

class TaxonomyConfigurationType extends AbstractType 
{ 

protected $container; 

public function __construct($container) 
{ 
    $this->container = $container; 
} 

/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('taxons', 'choice', array(
     'label' => 'Thème', 
     'choices' => $this->getThemeChoices(), 
     'multiple' => true, 
     'required' => true 
    )); 
} 

public function getName() 
{ 
    return 'promotion_rule_taxonomy_configuration'; 
} 

protected function getThemeChoices() { 

    $taxonomyRepository = $this->container->get('sylius.repository.taxonomy'); 
    $taxonomy = $taxonomyRepository->findOneByName('Thematique'); 
    $taxons = $taxonomy->getTaxonsAsList($taxonomy); 

    $choices = array(); 
    foreach($taxons as $t) { 
     $choices[$t->getId()] = $t->getName(); 
    } 

    return $choices; 
} 
} 

我可以選擇一個或多個正確序列化的分類羣,並在編輯推廣規則時檢索。我必須將@service_container作爲參數傳遞給此服務。

如果這是在SO上授權的,我將更新此帖子以進行下一步(規則檢查,產品價格調整而不是整個訂單...)。

+0

很樂意看到的其餘近如果可能,你的'自定義規則'的實現? – beterthanlife