【问题标题】:SilverStripe Dropdown with Categories and SubcategoriesSilverStripe 带有类别和子类别的下拉菜单
【发布时间】:2017-05-26 07:27:56
【问题描述】:

我有 2 个自定义对象:CategorySubcategory 已链接。
每个子类别都有一个CategoryID

结构如下:

Category1
 - Subcategory 1
 - Subcategory 2
 - Subcategory 3
Category 2
Category 3

我想做的事:

我有一个小部件,我需要在其中有一个具有上述结构的下拉字段。

我创建了一个自定义函数,这就是我现在所拥有的:

function getCategoriesAndSubcategories() {
    $categories = Category::get();
    $cat_array = array();

    foreach ($categories as $category) {
        $cat_array[$category->ID] = $category->Title; 
        $subcategories = SubCategory::get()->filter(array('CategoryID' => $category->ID));
        foreach ($subcategories as $subcategory) {  
        }
    }
}

我不确定这是否是解决问题的正确方法,但这就是我现在所拥有的。

谁能给点建议?

【问题讨论】:

  • 尝试一下,如果出错,请告诉我们。类别和子类别是不同的类别吗?

标签: php silverstripe


【解决方案1】:

由于没有人能够回答我的问题(只有我的语法错误),我最终创建了名为 MultipleGroupedDropdown 的自定义表单字段,它具有从 Listbox 获取的多项选择功能以及普通 Grouped DropDownfield 的所有其他功能。

如果有人需要这个,他们可以联系我,我会免费为他们提供这个字段。

【讨论】:

  • 很高兴听到您解决了问题。请在您的答案中分享您的代码,以帮助将来遇到类似问题的其他人。
【解决方案2】:

执行此操作的常规方法是使用层次结构扩展(与页面和安全组相同)。

层次结构向一个类添加了一个“children”方法,因此一个类别的子项也是类别。

如果您想为子类别使用不同的类,则子类别可以扩展类别。

如果你这样做了,你也可以使用 TreeMultiSelectField(它支持层次结构)。

我已在我的类别目录模块中使用此功能 (https://github.com/i-lateral/silverstripe-catalogue/blob/master/code/model/CatalogueCategory.php)。

希望有帮助吗?

【讨论】:

  • 这个问题已经解决了,但这看起来很有趣,我会看看这个,也许它对未来会有帮助。感谢您的回复!
【解决方案3】:

我们可以使用GroupedDropdownField 创建一个下拉字段,其中包含按类别分组的子类别:

假设我们的CategorySubcategory 类如下:

class Category extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(1024)'
    );

    private static $has_many = array(
        'Subcategories' => 'Subcategory'
    );
}

class Subcategory extends DataObject {

    private static $db = array(
        'Title' => 'Varchar(1024)'
    );

    private static $has_one = array(
        'Category' => 'Category'
    );
}

我们可以如下创建GroupedDropdownField

$categories = Category::get();
$subcategoryArray = array();

foreach ($categories as $category) {
    $subcategoryArray[$category->Title] = $category->Subcategories()->map('ID', 'Title')->toArray();
}

$groupedSubcategories = GroupedDropdownField::create(
    'Subcategories',
    'Subcategories',
    $subcategoryArray
);

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多