タグ付けされた質問 「blocks」

`Block`クラスに関する質問を示します。

6
magento 2の左側または右側のパネルからブロックを削除する方法
左のパネルから比較商品と買い物候補リストのブロックを削除したい。 テンプレートを変更したくない。使用してい2columns-leftます。 magento 1.xでは、レイアウトファイルで次のように使用します。 <cms_index_index> <reference name="left"> <remove name="left.newsletter"/> </reference> </cms_index_index> magento 2.xからブロックを削除するにはどうすればよいですか?

1
特定のブロックJS(およびCSS)を追加する方法-_正しい_方法?
だから私は文字通り何時間もグーグルで読んだり、電気ショック療法を勉強したりしましたが、誰も(アランストームさえも)これを私に綴った人はいません。インターネット全体がMagento 2の特定のページにJSまたはCSSを追加することに関心があるようですが、私が探しているのは、JS / CSSを特定のブロックに追加することです。 だから、ここに一言で私の質問があります: 特定のブロックにJS(およびCSS)を追加する最良の方法は何ですか。ブロックがページ(*)に存在する場合、JS / CSSがロードされ、ブロックがそこにない場合、CSS / JSはありません。 ? *つまり、layout.xmlを介してページ/テンプレートに、モジュールのカスタムページに、ブロック/ページのtoHtmlメソッドを介して、または最も重要なこととして、カテゴリのWYSIWYGに埋め込まれたブロックを設定できます。 /製品の説明/ CMSブロック/ CMSページ。 私はアランの素晴らしい記事の ALOTを読みました(この人に再び賞賛します!)、これに関する他の記事の連は言うまでもありませんが、誰もが特定のページに追加したいと思うような気がします。ブロックが使用されます。 私はさまざまなテクニックに精通しているように感じますが、ここで何か不足している可能性があるので、コミュニティからのコンセンサス、およびおそらくすべてのフロントエンドからフルスタックの開発者までの看板を少し探してください。私と同じような質問と選択肢を考えます。 以前は、Magento 1では、ブロックコンストラクターを調べ、レイアウトを取得し、ヘッド参照を取得して、そこでaddJs / addCssを呼び出すか、可能であれば、layout.xmlのメソッドを使用していました。これは、JSがブロックコンストラクターのリソースリストに「追加」されたことを意味します(テーマレベルがヘッドブロックを出力する前に)。しかし、これは今では不可能のようです。 私はJS / CSSを追加する方法について読みました(これは単純な「方法は?」ではありません。これはより簡潔な「正しい/ mag2の方法は何ですか???」)、これらに精通しています。テクニック: /view/[area]/layout/[default/page_id].xmlテクニック、<head></head>ルート要素を使用 モジュールにHeadブロックを追加し、head.additionalに追加し、ブロックが読み込まれているかどうかに関する何らかのロジックを追加する \ Asset \ GroupedCollectionオブジェクトと\ Asset \ Repositoryオブジェクトを使用して、ページ/テンプレートのcustructorから挿入します(ただし、これはブロックとorkしていないようです)。 RequireJSを使用してrequireJS構成をモジュールに適用する 何か逃したことがありますか? 正しい方法は、RequireJSライブラリと、x-magento-init属性を使用するかrequire("my_module", function(){ ... })、インラインスクリプトに構文を持つスクリプトだけを使用することだと考えています。しかし、これは私には不器用に思えますか?私はスクリプトをロードするためにスクリプトをセットアップする必要があり、少なくとも私のJSのいくつかをインライン化することを余儀なくされていますが、これを私のphtmlにポップすることによって、「ここが私のブロックです。 ただし、PHPを介してこれを実行できるようにしたいのですが、JSをカプセル化し、(理想的には)フロントエンドチームがこれを好きなように書けるようにするバックエンド/スタックプログラマーとして理想的です。要するに、ロードの処理に注意してください(バックエンド開発からフロントエンド開発までは「phtmlをここに置き、必要に応じてテーマでオーバーライドします。同様に、jsファイル、その依存ライブラリ、およびブロックのCSSをここに置きます」)。 これは、__construct資産システムに依存性を注入する方法を示唆しています。ただし、これを機能させることはできません。これは、ここのAlan Stormsのクイック記事で確認されているようです:Magento Quickies:Magento 2:プログラムによるフロントエンドアセットファイルの追加 「したがって、フロントエンドアセットを一緒に運ぶブロックを作成することについての考えは窓の外にあります」に注意してください。...つまらない:( お読みいただき、ご検討いただき、ありがとうございます。ご返信をお待ちしております。 PS>明らかに、これはStackExchangeなので、私が達成しようとしていること(特定のリソースの読み込みをブロックする)の最良のコースとして回答をマークしますが、すべての回答を投稿の下部に参照としてリストするように努力しますディスカッションに追加するか、解決策を提案します!

3
Magento2のモジュールを介してテンプレートを上書きする方法
モジュールを作成していて、テンプレートを上書きしたいapp/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml。 これはモジュールで可能ですか(テーマではありません) 残念ながら、これはhttps://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Blockにハードコードされているため、レイアウトXMLを介してモジュール名を変更するのは簡単ではないようです。 /Adminhtml/Product/Edit/Tab/Options.php#L21

2
1ページのチェックアウトにログインするためのブロックの追加
チェックアウトプロセス中に追加のログインオプションを追加しようとしました。現時点では、ユーザー名/パスワードの方法があります。OAuthプロセス(私の場合はGithub)を介してログインするボタン画像を追加したいと思います。 私は方法を見つけましたが、それは最善の方法ではありません。checkout / onepage / login.phtmlテンプレートファイルには、という名前のブロックの子を取得するための呼び出しがありますform.additional.info。 この方法で自分のブロックを挿入しようとしましたが、機能しませんでした。 <checkout_onepage_index> <reference name="form.additional.info"> <block type="core/template" name="login_github_button" as="login.github.button"> <action method="setTemplate" ifconfig="github/config/enabled"> <template>github/customer/login.phtml</template> </action> </block> </reference> </checkout_onepage_index> captchaモジュールによって行われるような別の方法を見つけました: <checkout_onepage_index> <reference name="checkout.onepage.login"> <block type="core/text_list" name="form.additional.info"> <block type="core/template" name="login_github_button" as="login.github.button"> <action method="setTemplate" ifconfig="github/config/enabled"> <template>github/customer/login.phtml</template> </action> </block> </block> </reference> </checkout_onepage_index> この場合は機能しますが、キャプチャは表示されません。複数のブロックをform.additional.infoブロックに挿入するにはどうすればよいですか? ご協力いただきありがとうございます 編集: 参照form.additional.infoメソッドを使用すると、ログインフィールドの下にボタンが表示されない理由がいくつか見つかりました。代わりに、チェックアウト請求ビューに表示されます。 ブロックform.additional.infoは、ブロックのcaptchaモジュールによって作成され、checkout.onepage.login次にブロックに対しても作成されますcheckout.onepage.billing Mage_Core_Model_Layout :: _ …

3
Magento2のページレイアウトの要素を削除することは可能ですか?
ページレイアウトに関するドキュメント(http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page)を読むと、このXMLドキュメントでは、次の指示が許可されています。 <container> <referenceContainer> <move> <update> <referenceBlock name="block.name" remove="true" />許可された手順の1つではないので、特定のページレイアウトの特定の要素を削除するにはどうすればよいですか? 私がトップカテゴリーに欲しいのは、まったく別のページデザインです。このデザインでは、特定のコンテナやブロックは必要ありません。これらのカテゴリでは、製品ではなく子カテゴリのみを表示します。 私が今やったことは、私のページレイアウトに次の行を追加することです:(でdesign\frontend\Vendor\Name-of-theme\Magento_Theme\page_layout\catalog-blocks.xml) <move element="category.image" destination="delete"></move> <move element="category.description" destination="delete"></move> <move element="category.products" destination="delete"></move> <move element="page.main.title" destination="delete"></move> ではdesign\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlI addded: <layout id="catalog-blocks"> <label translate="true">Catalog Blocks</label> </layout> 私はすべてのトップカテゴリーにこのカタログブロックのページレイアウトを管理者に与えました。 次に、メインレイアウト(design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml)に追加しました: <referenceBlock name="delete" remove="true" /> したがって、ページレイアウトで、私がここに移動したすべてのものとともに、削除ブロック全体が削除されます。これはうまくいきます!それは私が望むものを正確に達成しますが、全体としては少しハックに思えます。 これは良い習慣と考えられますか?そうでない場合、良い代替手段は何でしょうか? 編集1:remove混乱を避けるために、質問の- タグを正しいものに変更しました。 編集2:ファイルとファイルの場所に関するいくつかの詳細情報。


1
カスタムグリッドのアクション列のリンク
カタログメニューの[製品の管理]グリッドに似たカスタムグリッドがあります。 各エンティティアイテムへの対応するアクションリンクを取得する必要があります。それ、どうやったら出来るの? カスタムグリッドは、次のようにアクション列の関数を含むクラスMynamespace_Mymodule_Block_Adminhtml_MyblockGroup_Gridで宣言されて_prepareColumnsいます $this->addColumn('action', array( 'header' => Mage::helper('catalog')->__('Action'), 'width' => '50px', 'type' => 'action', 'getter' => 'getId', 'actions' => array( array( 'caption' => Mage::helper('catalog')->__('Edit'), 'url' => array( 'base'=>'*/*/edit', 'params'=>array('store'=>$this->getRequest()->getParam('store')) ), 'field' => 'id' ) ), 'filter' => false, 'sortable' => false, 'index' => 'stores', )); 現在、このアクションが取得しているリンクは'_baseUrl/adminfrontNameforMyModule/controller_action/edit/id/entity_id'です。 このアクションがリンクを取得すると'_baseUrl/admin/catalog_product/edit/id/entity_id'、私の問題は解決されたと思います。 これを手伝ってくれる人はいますか?

2
テンプレートからウィジェットインスタンスをロードできますか?
私のサイトの特定の領域に「ウィジェット」を作成したいのですが、技術的でないMagentoストア管理者が特定のパラメーターを構成できます。ウィジェットは、すべての説明で、これを行うための素晴らしい方法のように聞こえます。すべてのadminhtml要素は、手間をかけずにパラメーターを入力できるように配置されています。 しかし、私が解決できないのは、テンプレートの特定のポイントで特定のウィジェットインスタンスをロードしてレンダリングする方法です(CMS>ウィジェット>新しいウィジェットインスタンスの追加で作成され、widget_instanceに保存されます)。私はレイアウト更新機能を使用してそれをブロックに挿入しましたが、それはかなりうまく機能しますが、私が達成したいことに対して十分に柔軟ではありません。 テンプレートファイルでウィジェットインスタンスを読み込んでレンダリングすることは可能ですか?

4
Magento 2で子HTMLブロックに変数を渡す
でlist.phtml、他のモジュールから取得した子テンプレートの製品オブジェクトまたは製品IDを取得しようとしています。そのphtmlファイルで製品IDを取得するにはどうすればよいですか? magento 1.xでは、次の方法で可能でした。magento 2.xで使用するとエラーが発生する キャッチされないエラー:メンバー関数setData()の呼び出し 私のカスタムモジュールレイアウト <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="category.products.list"> <action method="setTemplate"> <argument name="template" xsi:type="string">PR_Catalog::product/list.phtml</argument> </action> <block class="PR\Catalog\Block\Product\Offers" name="category.products.offers" as="offer_list" template="PR_Catalog::product/offers.phtml" /> </referenceBlock> </body> </page> カスタムモジュールlist.phtmlファイル <?php foreach ($_productCollection as $_product){ ?> <?php $block->getChildBlock("offer_list")->setData("product", $_product); echo $block->getChildHtml('offer_list') ?> <?php } ?> ブロッククラスコードは <?php namespace PR\Catalog\Block\Product; class Offers …

4
プログラムによるブロック引数の設定と取得
レイアウトでは、ブロックを作成するときにカスタム引数を設定できます。次に例を示します。 <block class="Company\Module\Block\Hello" name="block_name" template="test.phtml"> <arguments> <argument name="my_arg" xsi:type="string">testvalue</argument> </arguments> </block> 後でブロック内でこのような引数を取得できます。 $arg = $this->getMyArg(); プログラムでブロックを作成すると(このメソッドに従って:link)、次のようにカスタム引数を設定できます。 $block = $this->frameworkViewLayout ->createBlock( "Company\Module\Block\Hello", "block_name", ['my_arg' => 'testvalue'] ) ->setData('area', 'frontend') ->setTemplate($template) ->toHtml(); ブロックは正しく作成され、完全に機能します。しかし、後でブロックのクラス内の引数を取得する方法がわかりません。私はこのようにしてみました: $arg = $this->getMyArg(); または $arg = $this->getData('my_arg'); しかし、それは何も返しません。私は何を取りこぼしたか?

3
Magento 2はバックエンドにボタンを追加します
cmsページ編集ビューのバックエンドに別のボタンを追加したいのですが。だから私はモジュールを作成しました(https://community.magento.com/t5/Programming-Questions/Overriding-a-block-in-Magento-2/mp/6831の助けを借りて): app / code / Company / Modulename / etc / module.xml <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="Company_Modulename" schema_version="0.0.1" setup_version="0.0.1"> <sequence> <module name="Magento_Cms" /> </sequence> </module> </config> app / code / Company / Modulename / etc / di.xml <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> <preference for="Magento\Cms\Block\Adminhtml\Page\Edit" type="Company\Modulename\Block\Adminhtml\Page\Edit" /> </config> app …

1
HTMLキャッシュとサブカテゴリの表示をブロックします
そのため、ストアを1.9.2.1に移動しました。BlocksHTMLキャッシュを除いて、すべてが正常に見えます。 私はこれをできる限り説明しようとします。 静的ブロックを使用してスクリプトを呼び出し、親カテゴリ内のサブカテゴリを表示する一般的な設定があります。 このチュートリアルに似たもの それは何の問題もなく常に機能しています...私がアップグレードするまで。私が目にしている問題は、この静的ブロックスクリプトを使用してサブカテゴリを表示するカテゴリページが失敗し、これらのすべてのカテゴリが同じキャッシュされたサブカテゴリページを表示することです。再キャッシュせずに、これらのすべてのページに同じコンテンツを提供するだけのようなものです。つまり、サブカテゴリスクリプトを使用するすべてのカテゴリには、正しくないサブカテゴリのキャッシュされたレイアウトが表示されるため、顧客はサイトの正しいレイヤーに移動できません。 Mageクリーンアップスクリプトを実行して、奇妙なアクセス許可の問題をリセットしましたが、役に立ちません。お客様が実際にサイトを閲覧できるようにするための一時的な修正として、問題をすぐに修正するBlocks HTMLキャッシュを無効にしました。したがって、明らかに問題は、キャッシュがコンテンツを正しく提供していないか、実際には再キャッシュが必要であることを認識していることです。これを修正するにはどうすればよいですか?個々の製品をリストしない親カテゴリー内のサブカテゴリーを提供するより効率的な方法はありますか? これがサブグリッドを素敵なグリッドに表示するために使用しているコードです(Pastbin): <div class='category-grid'> <?php if($_collectionSize): $i=0; $layer = Mage::getSingleton('catalog/layer'); ?> <ul class="products-grid"> <?php foreach ($_categories as $_category): $layer->setCurrentCategory($_category); $_category = Mage::getModel('catalog/category')->load($_category->getId()); $products = Mage::getModel('catalog/product')->getCollection() ->addCategoryFilter($_category) ->addAttributeToSort('price', 'asc') ->setPageSize(1) ->load(); $prod = $products->getFirstItem(); $lowestProductPrice = $taxHelper->getPrice($prod, $prod->getPrice(), true, null, null, null, null, false); $formattedPrice …

2
Block関数がResourceModel関数を呼び出すことはベストプラクティスですか?
Blockクラスが、Modelクラスではなく、ResourceModelクラスの関数を介してデータを取得することは適切ですか? または、ブロックはモデルを呼び出し、次にリソースモデルに呼び出しを渡す必要がありますか? BlockからResourceModelに直接移動するのが最も簡単で、考えられるかなりの数の関数の重複を回避できますが、それは悪い形式であり、ベストプラクティスのパターンを壊すと思いますか?


3
カスタムブロック「無効なブロックタイプ」
カスタムブロックがあり、2つの別々のブロックに分割しようとしています。 これが私のフォルダ構造です(app / code / local / MyNamespace / CustomerDashboard上): このモジュールの機能を2つの小さな部分に分割したいので、ファイルMyMenu.phpをブロックフォルダーとMyMenuController.phpコントローラーに追加しました。 次に、コードをコピー/貼り付けしDeliverydetails.phpてMyMenu.php、機能DeliverydetailsController.phpするMyMenuController.phpかどうかを確認しました。 私は自分のlocal.xmlに入って、モジュールとテンプレートへの参照を追加しました: <reference name="left"> <block type="customerdashboard/mymenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/> </reference> コンテンツが表示されるはずのページにアクセスすると、モジュールが表示されるはずの場所に何もありませんが、exceptions.logを確認したところ、次のことがわかりました。 exception 'Mage_Core_Exception' with message 'Invalid block type: MyNamespace_CustomerDashboard_Block_Mymenu' in /var/www/html/mysite/public_html/app/Mage.php:595 Stack trace: #0 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(495): Mage::throwException('Invalid block type...') #1 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('customerdashboa...', Array) #2 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('customerdashboa...', 'customerdashboa...') #3 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('customerdashboa...', 'customerdashboa...') …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.