我是 Magento 2 的新手,我有一个自定义模块,它使用插件来更改目录模型层中的产品集合。我使用以下选项为产品创建了一个多选自定义属性:
backend => '\Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend'
它成功地创建、填充并保存了多选字段及其来自编辑产品表单的数据。我还能够毫无问题地从多选数组中获取所有值:
$product->getAllAttributeValues('my_custom_attribute');
这会打印出如下内容:
Array
(
[18] => Array
(
[0] => 1,3,4
)
[14] => Array
(
[0] =>
)
[32] => Array
(
[0] => 3,8
)
)
所以这是我的问题:
假设我有一个变量
$value = "3"
我只想显示在 my_custom_attribute 中具有该 $value 的产品。在上面的示例中,只会显示 [18] 和 [32]。
有没有办法在 Magento 2 中使用 addAttributeToFilter() 方法来做到这一点?
例如:
$product->addAttributeToFilter('my_custom_attribute', $value);
编辑: 有没有办法在数组上也做一个“nin”(不在),以便如果 $value = 1,只显示 [14] 和 [32]?例如:
$value = 1;
$product->addAttributeToFilter('my_custom_attribute', array('nin' => $value))
最佳答案
注意:这个问题的目的是找出是否有一种新的 Magento 2 方法可以做到这一点,但是经过几天的搜索并且没有任何回应,我空手而归。所以这个答案是基于我对 Magento 1.x 的经验。它适用于 Magento 2,但可能有更合适的方法。
这是我的解决方案:
/**
* @param $product
* @return mixed
*/
public function filterProducts($product) {
$attributeValues = $product->getAllAttributeValues('my_custom_attribute');
foreach($attributeValues as $entity_id => $value) {
if($this->_isItemHidden($value[0])) {
$this->_removeCollectionItems($product, $entity_id);
}
}
return $product;
}
/**
* @return int
*/
protected function _getCustomValue() {
return '3';
}
/**
* @param $string
* @return bool
*/
protected function _isItemHidden($string) {
$customValue= $this->_getCustomValue();
$multiselectArray= explode(',', $string);
foreach($multiselectArray as $value) {
if($value== $customValue){
return true;
}
}
return false;
}
/**
* @param $collection
* @param $customValue
*/
protected function _removeCollectionItems($collection, $entity_id)
{
$collection->addAttributeToFilter('entity_id', array('nin' => $entity_id));
}
其中 $this->_getCustomValue() == 您尝试包含或排除的任何值。
所以在我的插件中,filterProducts() 被调用并传入原始函数的返回值。
关于php - Magento 2 - 多选自定义产品属性的过滤器集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34666763/
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
我有一个名为Post的类,我需要能够适应以下场景:如果用户选择了一个类别,则只显示该类别的帖子如果用户选择了一种类型,则只显示该类型的帖子如果用户选择了一个类别和类型,则只显示该类别中该类型的帖子如果用户没有选择任何内容,则显示所有帖子我想知道我的Controller是否不可避免地会因大量条件语句而显得粗糙...这是我解决此问题的错误方法-有谁知道我如何才能做到这一点?classPostsController 最佳答案 您最好遵循“胖模型,瘦Controller”的惯例,这意味着您应该将这种逻辑放在模型本身中。Post类应该能够报告