首页 Magento2正文

常用代码

kumb Magento2 2020-07-03 10:50:12 620 0 cms

常用代码

常用代码

获取objectManager

  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();  

用这个objectManager方法能调用所有类,无需在构造函数里定义。

DataObject是所有Model的基类

$row  =   new   \ Magento \ Framework \ DataObject (); $row -> setData ( $key ,  $value ); $row -> getData ( $key ); $row -> hasData ( $key ); $row -> unsetData (); $row -> toXml (); $row -> toJson (); $row -> debug ();

Session

$session  =  $objectManager -> get ( 'Magento\Framework\Session\Storage' ); $session -> setXxxx ( $value ); $session -> getXxxx (); $session -> hasXxxx (); $session -> unsXxxx ();

cache

// save $this -> cache  =  $context -> getCache (); $this -> cache -> save ( \Zend_Json :: encode ( $data ),  self :: CACHE_PREFIX  .  $key ,   [],  $lifeTime ); // load $jsonStr  =  $this -> cache -> load ( self :: CACHE_PREFIX  .  $cacheKey ); if   ( strlen ( $jsonStr ))   {     $this -> cachedData  =  \Zend_Json :: decode ( $jsonStr ); }

判断是否首页

// in action if ( $this -> _request -> getRouteName ()   ==   'cms'   &&  $this -> _request -> getActionName ()   ==   'index' )   {      // is home }

Registry 用于内部传递临时值

/* @var \Magento\Framework\Registry $coreRegistry */ $coreRegistry  =  $this -> _objectManager -> get ( 'Magento\Framework\Registry' ); // 存储值 $coreRegistry -> register ( 'current_category' ,  $category ); // 提取值 $coreRegistry -> registry ( 'current_category' );

获取当前店铺对象

  $store = $objectManager->get( 'Magento\Store\Model\StoreManagerInterface' )->getStore();  

提示信息

// \Magento\Framework\App\Action\Action::execute() $this -> messageManager -> addSuccessMessage ( __ ( 'You deleted the event.' )); $this -> messageManager -> addErrorMessage ( __ ( 'You deleted the event.' )); return  $this -> _redirect  (  $returnUrl  ); log  ( support_report . log ) \Magento\Framework\App\ObjectManager :: getInstance ()      -> get (   '\Psr\Log\LoggerInterface'   ) -> addCritical (   'notice message' ,   [          'order_id'   =>  $order_id ,          'item_id'   =>  $item_id          // ...      ]);

保存customer自定义属性

比如我新建了一个customer属性叫   new_register_promocode  

$customer  =  $objectManager -> get ( '\Magento\Customer\Model\Customer' ) -> load ( $customer -> getId ());                 $customerDataModel  =  $customer -> getDataModel ();                 $customerDataModel -> setCustomAttribute ( 'new_register_promocode' , null );                 $customer -> updateData ( $customerDataModel );                 $customer -> save ();

获取当前页面 URL

  $currentUrl = $objectManager->get( 'Magento\Framework\UrlInterface' )->getCurrentUrl();  

获取指定路由 URL

  $url = $objectManager->get( 'Magento\Store\Model\StoreManagerInterface' )->getStore()->getUrl( 'xxx/xxx/xxx' );  

获取pub/media的URL

$url  =  $objectManager -> get ( 'Magento\Store\Model\StoreManagerInterface' ) -> getStore () -> getBaseUrl ( 'media' );

输出: http://xxx.com/pub/media/

block里的URL

// 首页地址 $block -> getBaseUrl (); // 指定 route 地址 $block -> getUrl (   '[module]/[controller]/[action]'   ); // 指定的静态文件地址 $block -> getViewFileUrl (   'Magento_Checkout::cvv.png'   ); $block -> getViewFileUrl (   'images/loader-2.gif'   );

获取所有website的地址

$storeManager  =  $objectManager -> get ( 'Magento\Store\Model\StoreManagerInterface' ); foreach ( $storeManager -> getWebsites ()  as $website )   {     $store_id  =  $storeManager -> getGroup ( $website -> getDefaultGroupId ()) -> getDefaultStoreId ();     $storeManager -> getStore ( $store_id ) -> getBaseUrl (); }

获取module下的文件

/** @var \Magento\Framework\Module\Dir\Reader $reader */ $reader  =  $objectManager -> get ( 'Magento\Framework\Module\Dir\Reader' ); $reader -> getModuleDir ( 'etc' ,   'Infinity_Project' ). '/di.xml' ;

获取资源路径

/* @var \Magento\Framework\View\Asset\Repository $asset */ $asset  =  $this -> _objectManager -> get (   '\Magento\Framework\View\Asset\Repository'   ); $asset -> createAsset ( 'Vendor_Module::js/script.js' ) -> getPath ();

文件操作

/* @var \Magento\Framework\Filesystem $fileSystem */ $fileSystem  =  $this -> _objectManager -> get ( 'Magento\Framework\Filesystem' ); $fileSystem -> getDirectoryWrite ( 'tmp' ) -> copyFile ( $from ,  $to ); $fileSystem -> getDirectoryWrite ( 'tmp' ) -> delete ( $file ); $fileSystem -> getDirectoryWrite ( 'tmp' ) -> create ( $file );

文件上传

// 上传到media $request  =  $this -> getRequest  (); if ( $request -> isPost ())   {      try {          /* @var $uploader \Magento\MediaStorage\Model\File\Uploader */         $uploader  =  $this -> _objectManager -> create (              'Magento\MediaStorage\Model\File\Uploader' ,              [ 'fileId'   =>   'file' ]          );          /* @var $filesystem \Magento\Framework\Filesystem */         $filesystem  =  $this -> _objectManager -> get (   'Magento\Framework\Filesystem'   );         $dir  =  $filesystem -> getDirectoryRead (  \Magento\Framework\App\Filesystem\DirectoryList :: UPLOAD  ) -> getAbsolutePath ();         $fileName  =   time (). '.' . $uploader -> getFileExtension ();         $uploader -> save ( $dir ,  $fileName );         $fileUrl  =   'pub/media/upload/' . $fileName ;      }   catch ( Exception $e )   {          // 未上传      } }
// 上传到tmp /* @var \Magento\Framework\App\Filesystem\DirectoryList $directory */ $directory  =  $this -> _objectManager -> get ( 'Magento\Framework\App\Filesystem\DirectoryList' ); /* @var \Magento\Framework\File\Uploader $uploader */ $uploader  =  $this -> _objectManager -> create ( 'Magento\Framework\File\Uploader' ,   array ( 'fileId'   =>   'file1' )); $uploader -> setAllowedExtensions ( array ( 'csv' )); $uploader -> setAllowRenameFiles ( true ); $uploader -> setFilesDispersion ( true ); $result  =  $uploader -> save ( $directory -> getPath ( $directory :: TMP )); $directory -> getPath ( $directory :: TMP ). $result [ 'file' ];

产品缩略图

$imageHelper  =  $objectManager -> get (   'Magento\Catalog\Helper\Image'   ); $productImage  =  $imageHelper -> init (  $product ,   'category_page_list'   )    -> constrainOnly (  FALSE  )    -> keepAspectRatio (  TRUE  )    -> keepFrame (  FALSE  )    -> resize (   400   )    -> getUrl ();

缩略图

$imageFactory  =  $objectManager -> get (   'Magento\Framework\Image\Factory'   ); $imageAdapter  =  $imageFactory -> create ( $path ); $imageAdapter -> resize ( $width ,  $height ); $imageAdapter -> save ( $savePath );

产品属性

/* @var \Magento\Catalog\Model\ProductRepository $product */ $product  =  $objectManager -> create ( 'Magento\Catalog\Model\ProductRepository' ) -> getById ( $id ); // print price /* @var \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency */ $priceCurrency  =  $objectManager -> get ( 'Magento\Framework\Pricing\PriceCurrencyInterface' ); $priceCurrency -> format ( $product -> getData ( 'price' )); // print option value $product -> getResource () -> getAttribute ( 'color' ) -> getDefaultFrontendLabel (); $product -> getAttributeText ( 'color' ); // all options $this -> helper ( 'Magento\Catalog\Helper\Output' ) -> productAttribute ( $product ,  $product -> getData ( 'color' ),   'color' ); $product -> getResource () -> getAttribute ( 'color' ) -> getSource () -> getAllOptions (); // save attribute $product -> setWeight ( 1.99 ) -> getResource () -> saveAttribute ( $product ,   'weight' ); // 库存 $stockItem  =  $this -> stockRegistry -> getStockItem ( $productId ,  $product -> getStore () -> getWebsiteId ()); $minimumQty  =  $stockItem -> getMinSaleQty (); // Configurable Product 获取父级产品ID $parentIds  =  $this -> objectManager -> get ( 'Magento\ConfigurableProduct\Model\Product\Type\Configurable' )      -> getParentIdsByChild ( $productId ); $parentId  =   array_shift ( $parentIds ); // Configurable Product 获取子级产品ID $childIds  =  $this -> objectManager -> get ( 'Magento\ConfigurableProduct\Model\Product\Type\Configurable' )      -> getChildrenIds ( $parentId ); // 获取Configurable Product的子产品Collection $collection  =  $this -> objectManager -> get ( 'Magento\ConfigurableProduct\Model\Product\Type\Configurable' )      -> getUsedProducts ( $product ); // 判断是否Configurable Product if   ( $_product -> getTypeId ()   ==  \Magento\ConfigurableProduct\Model\Product\Type\Configurable :: TYPE_CODE );

购物车中的所有产品

/* @var \Magento\Checkout\Model\Session $checkoutSession */ $checkoutSession  =  $objectManager -> get ( 'Magento\Checkout\Model\Session' ); foreach ( $checkoutSession -> getQuote () -> getItems ()  as $item )   {      /* @var \Magento\Quote\Model\Quote\Item $item */     echo $item -> getProduct () -> getName (). '<br/>' ; }

获取类型配置

$eavConfig -> getAttribute ( 'catalog_product' ,   'price' ); $eavConfig -> getEntityType ( 'catalog_product' );

获取 EAV 属性所有可选项

/* @var $objectManager \Magento\Framework\App\ObjectManager */ $eavConfig  =  $objectManager -> get (   '\Magento\Eav\Model\Config'   ); $options  =  $eavConfig -> getAttribute (   '[entity_type]' ,   '[attribute_code]'   )      -> getFrontend () -> getSelectOptions (); //或者 /* @var $objectManager \Magento\Framework\App\ObjectManager */ $options  =  $objectManager -> create (   'Magento\Eav\Model\Attribute'   )      -> load (   '[attribute_code]' ,   'attribute_code'   ) -> getSource ()      -> getAllOptions (   false   );

获取config.xml与system.xml里的参数

$this -> _scopeConfig  =  $this -> _objectManager -> create ( 'Magento\Framework\App\Config\ScopeConfigInterface' ); // 语言代码 $this -> _scopeConfig -> getValue ( 'general/locale/code' ,  \Magento\Store\Model\ScopeInterface :: SCOPE_STORE ,  $storeId );

客户唯一属性验证

if ( $customer  instanceof   \ Magento \ Customer \ Model \ Customer )   {      /* @var \Magento\Customer\Model\Attribute $attribute */      foreach ( $customer -> getAttributes ()  as $attribute )   {          if ( $attribute -> getIsUnique ())   {              if   ( ! $attribute -> getEntity () -> checkAttributeUniqueValue ( $attribute ,  $customer ))   {                 $label  =  $attribute -> getFrontend () -> getLabel ();                  throw   new   \ Magento \ Framework \ Exception \ LocalizedException (                      __ ( 'The value of attribute "%1" must be unique.' ,  $label )                  );              }          }      } }

读取design view.xml

< vars module = "Vendor_Module" >      < var name = "var1" > value1 </ var > </ vars >
/* @var \Magento\Framework\Config\View $viewConfig */ $viewConfig  =  $objectManager -> get ( 'Magento\Framework\Config\View' ); $viewConfig -> getVarValue ( 'Vendor_Module' ,   'var1' );

获取邮件模板

虽然叫邮件模板,但也可以用于需要后台编辑模板的程序

// template id, 通常在email_templates.xml定义。如果是在后台加的email template,需要换成template的记录ID,例如90 $identifier  =   'contact_email_email_template' ; /* @var \Magento\Framework\Mail\TemplateInterface $templateFactory */ $templateFactory  =  $this -> _objectManager -> create (      'Magento\Framework\Mail\TemplateInterface' ,      [ 'data'   =>   [ 'template_id'   =>  $identifier ]] ); // 模板变量,取决于phtml或后台email template的内容 $dataObject  =   new   \ Magento \ Framework \ DataObject (); $dataObject -> setData ( 'name' ,   'william' ); // 决定模板变量取值区域,例如像{{layout}}这样的标签,如果取不到值可以试试把area设为frontend $templateFactory -> setOptions ([      'area'   =>  \Magento\Backend\App\Area\FrontNameResolver :: AREA_CODE ,      'store'   =>  \Magento\Store\Model\Store :: DEFAULT_STORE_ID ]); $templateFactory -> setVars ([ 'data'   =>  $dataObject ]); return  $templateFactory -> processTemplate ();

内容返回

$this -> resultFactory  =  $this -> _objectManager -> create ( 'Magento\Framework\Controller\Result\RawFactory' ); /* @var \Magento\Framework\Controller\Result\Raw $result */ $result  =  $this -> resultFactory -> create (); $result -> setContents ( 'hello world' ); return  $result ;
$this -> resultFactory  =  $this -> _objectManager -> create ( 'Magento\Framework\Controller\Result\JsonFactory' ); /* @var \Magento\Framework\Controller\Result\Json $result */ $result  =  $this -> resultFactory -> create (); $result -> setData ([ 'message'   =>   'hellog world' ]); return  $result ;

HTTP文件

$this -> _fileFactory  =  $this -> _objectManager -> create ( 'Magento\Framework\App\Response\Http\FileFactory' ); $this -> _fileFactory -> create (      'invoice'   .  $date  .   '.pdf' ,     $pdf -> render (),     DirectoryList :: VAR_DIR ,      'application/pdf' );

切换货币与语言

$currencyCode  =   'GBP' ; /* @var \Magento\Store\Model\Store $store */ $store  =  $this -> _objectManager -> get ( 'Magento\Store\Model\Store' ); $store -> setCurrentCurrencyCode ( $currencyCode ); $storeCode  =   'uk' ; /* @var \Magento\Store\Api\StoreRepositoryInterface $storeRepository */ $storeRepository  =  $this -> _objectManager -> get ( 'Magento\Store\Api\StoreRepositoryInterface' ); /* @var \Magento\Store\Model\StoreManagerInterface $storeManager */ $storeManager  =  $this -> _objectManager -> get ( 'Magento\Store\Model\StoreManagerInterface' ); /* @var \Magento\Store\Api\StoreCookieManagerInterface $storeCookieManager */ $storeCookieManager  =  $this -> _objectManager -> get ( 'Magento\Store\Api\StoreCookieManagerInterface' ); /* @var \Magento\Framework\App\Http\Context $httpContext */ $httpContext  =  $this -> _objectManager -> get ( 'Magento\Framework\App\Http\Context' ); $defaultStoreView  =  $storeManager -> getDefaultStoreView (); $store  =  $storeRepository -> getActiveStoreByCode ( $storeCode ); $httpContext -> setValue ( \Magento\Store\Model\Store :: ENTITY ,  $store -> getCode (),  $defaultStoreView -> getCode ()); $storeCookieManager -> setStoreCookie ( $store ); $this -> getResponse () -> setRedirect ( $this -> _redirect -> getRedirectUrl ());

Profiler

\Magento\Framework\Profiler :: start (      'CONFIGURABLE:'   .  __METHOD__ ,      [ 'group'   =>   'CONFIGURABLE' ,   'method'   =>  __METHOD__ ] ); \Magento\Framework\Profiler :: stop ( 'CONFIGURABLE:'   .  __METHOD__ );

HTML表单元素

日历控件

$block -> getLayout () -> createBlock ( 'Magento\Framework\View\Element\Html\Date' )      -> setName ( 'date' )      -> setId ( 'date' )      -> setClass ( 'date' )      -> setDateFormat ( 'M/d/yy' )      -> setImage ( $block -> getViewFileUrl ( 'Magento_Theme::calendar.png' ))      -> setExtraParams ( 'data-validate="{required:true}"' )      -> toHtml ();

select控件

$block -> getLayout () -> createBlock ( 'Magento\Framework\View\Element\Html\Select' )      -> setName ( 'sel1' )      -> setId ( 'sel1' )      -> setClass ( 'select' )      -> addOption ( 'value' ,   'label' )      -> setValue ( $default )      -> setExtraParams ( 'data-validate="{required:true}"' )      -> toHtml ();

获取产品属性的label

比如产品属性   color   ,我后台设置了中文label为   颜色   。 用下面的代码可以获取属性   color     label  

$_attributeLabel  =  $_product -> getResource () -> getAttribute ( $_code ) -> getStoreLabel ();

获取产品属性option的label

比如产品属性color,是dropdown类型的,某个option值为XL. 前台直接$product->getColor(),得到的是个数字,而不是我设置的'XL'。 用下面的代码可以获取option的label

$optionLabel  =  $_product -> getResource () -> getAttribute ( 'your_attribute_code' ) -> getFrontend () -> getValue ( $_product );

获取订单里的产品

$allItems  =  $order -> getAllItems (); foreach  ( $allItems as $item )   { if   ( $item -> getParentItem ()              )   {              //忽略掉可配置产品的子产品                  continue ;              }             $qty  =   ( int ) $item -> getQty () * 1 ;             $name  =  $item -> getProduct () -> getName ();     }

获取产品的catalog price rule

/**  * @param $productId  * @param $customerGroupId  * @return mixed  */ public  function   getCatalogPriceRuleFromProduct ( $productId ,  $customerGroupId ) {      /**      * @var \Magento\Catalog\Model\ProductFactory      */     $product  =  $this -> _objectManager -> create ( '\Magento\Catalog\Model\ProductFactory' ) -> create () -> load ( $productId );     $storeId  =  $product -> getStoreId ();     $store  =  $this -> _store_manager -> getStore ( $storeId );     $websiteId  =  $store -> getWebsiteId ();      /**      * @var \Magento\Framework\Stdlib\DateTime\DateTime      */     $date  =  $this -> _objectManager -> create ( '\Magento\Framework\Stdlib\DateTime\DateTime' );     $dateTs  =  $date -> gmtDate ();      /**      * @var \Magento\CatalogRule\Model\ResourceModel\Rule      */     $resource  =  $this -> _objectManager -> create ( '\Magento\CatalogRule\Model\ResourceModel\Rule' );     $rules  =  $resource -> getRulesFromProduct ( $dateTs ,  $websiteId ,  $customerGroupId ,  $productId );      return  $rules ; }

获得实际的折扣金额:

/* * @var \Magento\CatalogRule\Model\RuleFactory  */ $rule  =  $this -> _objectManager -> create ( '\Magento\CatalogRule\Model\RuleFactory' ) -> create (); $discountAmount  =  $rule -> calcProductPriceRule ( $product , $product -> getPrice ());

获取当前页面的控制器/action等

  phtml     controller   里调用

echo $controllerName  =  $this -> getRequest () -> getControllerName (); echo $actionName  =  $this -> getRequest () -> getActionName (); echo $routeName  =  $this -> getRequest () -> getRouteName (); echo $moduleName  =  $this -> getRequest () -> getModuleName ();  

我们致力于为三农(农业、农村、农民)提供专业物联网解决方案,同时也提供应用软件、微信小程序、手机App、企业网站的开发和跨境电商建站、网络营销等服务,站长微信号(mywit_net),添加后备注“黎辉物联网”,如有相关需求也可通过电子邮件(12tc@sina.cn)与我们取得联系

本站内容均来自互联网,如有涉及到侵权行为,请你及时与站长联系删除!

本文链接:https://kumb.cn/1737.html

发表评论

评论列表(0人评论 , 620人围观)
☹还没有评论,来说两句吧...