ホームページ バックエンド開発 PHPチュートリアル Magento 開発ノート 3_PHP チュートリアル

Magento 開発ノート 3_PHP チュートリアル

Jul 14, 2016 am 10:07 AM
magento view 一度 焦点を当てる そして 存在する 開発する 私たち ノート これ 一部

このセクションでは、ビュー内のレイアウトとブロックに焦点を当てます。

他の主流の PHPMVC アーキテクチャとは異なり、magento の ActionController はデータ オブジェクトをビューに渡したり、View オブジェクトにプロパティを設定したりしません。 View は、システム モジュールを通じて必要な情報を取得します。
この設計の結果、ビューはブロックとテンプレートに分割されます。ブロックは PHP オブジェクトであり、テンプレートは PHP コードと HTML を組み合わせたものです (PHP をテンプレート言語として使用すると考えることもできます)。各ブロックはテンプレート ファイルにバインドされます。 Phtml ファイルでは、PHP キーワード $this に、テンプレートに対応するブロックへの参照が含まれます。
これが簡単な例です。テンプレート ファイル app/design/frontend/base/default/template/catalog/product/list.phtml を表示します
次のコードが表示されます
getLoadedProductCollection() ?>
count()): ?>
__("選択内容に一致する商品がありません。")?>
getLoadedProudctController は、対応するブロック ファイル内にあります
app/code/core/Mage/Catalog/Block/Product/List.php
パブリック関数getLoadedProductCollection()
{
return$this->_getProductCollection();
}
_getProductCollection はモデルをインスタンス化し、データを対応するテンプレートに取得します。
埋め込みブロック
ブロック/テンプレートの真の力は getChildHtml メソッドです。これにより、メインのブロック/テンプレート (xml 形式) にセカンダリ ブロック/テンプレートを含めることができます
ブロックを呼び出すブロックは、HTML レイアウト全体を形成します。例を見てみましょう
App/design/frotend/base/default/template/page/1column.phtml
getLang() ?>" lang="getLang( )?>"> getChildHtml('head') ?> getChildHtml('content') ?> getChildHtml('before_body_end') ?>
getAbsoluteFooter() ?>
ファイルは長くありませんが、各呼び出しは $this->getChildHtml(…) であり、他のブロックを含めてレンダリングします。これらのブロックは他のブロックを呼び出すこともできます。
レイアウト
ブロックとテンプレートは良いですが、次のような疑問があるかもしれません
1. ページでどのブロックが使用されているかを Magento に伝えるにはどうすればよいですか?
2. Magento にそれが初期であることをどのように伝えるか
3. 各ブロックに次のブロックを呼び出すように指示するにはどうすればよいですか
このとき、Layoutオブジェクトが必要です。 Layout オブジェクトは XML 形式であり、ページにどのブロックが含まれるか、またどのブロックがページのレンダリングを担当するかを定義します。
以前の Hello World プロジェクトはアクション メソッドで直接実行しました。今回は、モジュールを提供するための単純な HTMLtemplate を作成します。
まずファイルを作成します
アプリ/デザイン/フロントエンド/ベース/デフォルト/レイアウト/local.xml
続いて以下の内容を書きます
<レイアウトバージョン="0.1.0">
<参照名="ルート">
次に別のファイルを作成します
app/design/frontend/base/default/template/simple_page.phtml (構成内のテンプレートと一致していることに注意してください)
以下を書きます
無題
ボディ {背景色:#f00}
最後に、Aciton コントローラーはレイアウト プロセスの開始を担当します。次の 2 行のコードを追加します
パブリック関数indexAction() {
//前のエコーを削除
//エコー「こんにちはインデックス!」
;
$this->loadLayout();
$this->renderLayout();
}
キャッシュをクリアして Hello World コントローラー ページをリロードすると、ページの背景が赤になり、HTML ソース コードが simple_page.phtml に対応していることがわかります。
何が起こったのですか?
すべてが神秘的に思えました。このプロセスを詳しく見てみましょう。まず、Layoutviewer モジュールをインストールします。このモジュールは Configviewer に非常に似ています。
インストールしたら、以下のURLを使用できるようになります
http://localhost/magento/helloworld/index/index?showLayout=page
これはリクエストされたページに対応するレイアウト XML です。これは タグと タグで構成されます。 loadLaout メソッドを呼び出すと、
1. レイアウト XML を生成します
2. および の下の Block クラスをインスタンス化します。タグ名属性を検索し、グローバル構成ファイル内で対応する属性を見つけて、それを Layout オブジェクトの external_blocks 配列に保存します。
3. タグに出力属性が含まれている場合、その値は Layout オブジェクトの external_blocks 配列にも追加されます。
このようにして、アクション コントローラーで renderLayout を呼び出すと、Mageno は _blocks 配列内のすべてのブロックを反復し、対応する出力属性をコールバック関数として使用します。これは HTML への変換に相当します。つまり、ブロックのテンプレートが出力の開始点になります。
次の部分には、ブロックのインスタンス化方法、レイアウト ファイルの生成方法、および出力の終了が含まれます。
インスタンス化をブロック
LayoutXml には、URI に相当する または の型があります。
URI はグローバル設定ファイル内のアドレスを指定します。 URI の最初の部分は、グローバル構成ファイルを検索し、Page クラス名を検索するために使用されます。 2 番目の部分は最初の部分に続き、新しいクラスとなり、インスタンス化されます。
page/htmlを例として取り上げます。まず、Magento はグローバル設定ファイル内で次の
を探します。
/グローバル/ブロック/ページ
それから
を見つけてください
<ページ>
<クラス>
Mage_Page_Block
このようにして、MagePageBlock クラスを取得します。次に、URI の 2 番目の部分が追加されて、MagePageBlock_Html になります。このクラスはインスタンス化されます。
ブロックは Magento のグループ クラスでもあり、すべて同様のインスタンス化メソッドを共有します。この部分については後ほど詳しく紹介します。
の違い
の両方が Block をインスタンス化できることについて説明しましたが、それらの違いは何ですか。
先着順
それでは
<レイアウトバージョン="0.1.0">
;
<参照名="ルート">
内部のブロックはブロックを置き換えません。代わりに、既存のブロックに追加または変更します。上の例では、ルートと呼ばれる新しいブロックが既存のルートブロックに挿入されます。これはMagento Layoutでは未定義です。最終的には古いものが置き換えられますが、一貫性を確保するためにこれに依存するのは悪い考えです。
レイアウトファイルの生成方法
これで、レイアウト XML についてより明確に理解できるようになりました。しかし、レイアウト XML はどこから来たのでしょうか?この質問に答えるには、ハンドルとパッケージ レイアウトという 2 つの新しい概念を導入する必要があります。
ハンドル
Magento の各リクエストは、いくつかの異なるハンドルを生成します。 Layoutview モジュールは、URL を使用してこれらを表示できます
http://localhost/magento/helloworld/index/index?showLayout=handles
次のようなものが表示されます
1.デフォルト
2.STORE_bare_us
3. テーマ_フロントエンド_デフォルト_デフォルト
4. Helloworld_index_index
5. 顧客のログアウト
これらのそれぞれはハンドルです。 Magento ではハンドルがさまざまな場所に設定されます。そのうちの 2 つ、default と helloworld_index_index に注意する必要があります。デフォルトのハンドルはリクエストごとに表示されます。 Helloworld_index_indexHandle は、frontName (helloworld)、Actioncontroller (インデックス)、およびアクション コントローラーのアクション メソッド (インデックス) を結合することによって形成されます。これは、各 ActionController メソッドがハンドルに対応する可能性があることを意味します。
「index」はすべてのアクション コントローラーとアクションメソッドに対する Magento のデフォルトであることに注意してください。したがって、以下のリクエストになります
http://localhost/magento/helloworld/?showLayout=handles
ハンドルの名前も生成されます helloworld_index_index
パッケージレイアウト
PackageLayout はグローバル構成と同等であると考えることができます。これは、Magento で可能なすべてのレイアウト構成を含む大きな XML ファイルです。見てみましょう
http://localhost/magento/helloworld/index/index?showLayout=package
読み込みに時間がかかる場合があります。ブラウザが XML の下でスタックしている場合は、テキスト モードに切り替えてください
http://localhost/magento/helloworld/index/index?showLayout=package&showLayoutFormat=text
大きなXMLファイルを表示できます。これがパッケージレイアウトです。これは、現在のテーマのすべての XMLLayout ファイルを組み合わせたものです。デフォルトのインストールは
アプリ/デザイン/フロントエンド/ベース/デフォルト/レイアウト/
グローバル ファイルには セクションがあり、ノードにはロードされるすべての名前が含まれています。設定ファイルで指定されたファイルがマージされると、Magento は前の XML ファイル local.xml にマージされます。これにより、必要な機能を追加できます。
Hanldes とパッケージレイアウトをマージ
パッケージ レイアウトを見ると、 などのいくつかのおなじみのタグが表示されますが、これらはすべて次のようなタグでカバーされています
<デフォルト />
など…
これらはハンドルタグです。リクエストのレイアウトは、リクエストに一致するすべてのハンドルのパッケージ レイアウトから生成されます。したがって、上記の例では、レイアウトは以下のセクションで生成されます
<デフォルト />
<顧客ログアウト/>
注意が必要なラベルがもう 1 つあります。 他のハンドルを含めることができます。たとえば
<顧客アカウントインデックス>
<ハンドル="顧客アカウント"/>を更新します
これは、customeraccountindex をリクエストするときに、 の下に を含める必要があることを意味します。
学んだことを応用する
理論はこれくらいにして、以前の作業を復習しましょう。
<レイアウトバージョン="0.1.0">
これはルートタグを書き換えたことを意味します。 部分は、すべてのリクエストでそれが行われることを保証します。これは私たちが望んでいる効果ではないかもしれません。
他のページにアクセスすると、空白のページまたは赤い背景が表示されます (前の helloworld ページと同様)。そこで、local.xml を改善して、helloworld ページにのみ使用されるようにしましょう。以下のように修正しました
<レイアウトバージョン="0.1.0">
キャッシュをクリアすると、この時点で他のページが復元されるはずです。
その後、googbye Aciton Method に適用します
パブリック関数 GoodbyeAction() { $this->loadLayout() }
この時点で http://localhost/magento/helloworld/index/goodbye をロードします
まだ空白のページであることがわかります。このとき、local.xmlにactionnameを追加する必要があります。内容は次のとおりです
<レイアウトバージョン="0.1.0">
このとき、次の2つのページも同様の効果になります。
http://localhost/magento/helloworld/index/index
http://localhost/magento/helloworld/index/goodbye
出力とgetChildHtmlを開始します
標準構成では、出力は root という名前のブロックから始まります (これが出力の特徴です)。ルートテンプレート template="simple_page.phtml" を書き換えました
テンプレートは、現在のテーマまたはベーステーマのメインディレクトリから取得されます。
アプリ/デザイン/フロントエンド/ベース/デフォルト/テンプレート
通常は、独自のテーマまたはデフォルトのテーマにテンプレートを追加できます
アプリ/デザイン/フロントエンド/デフォルト/デフォルト/テンプレート
アプリ/デザイン/フロントエンド/デフォルト/カスタム/テンプレート
ベース ディレクトリは検索される最後のディレクトリです。magento が他のテーマで見つからない場合は、ベース ディレクトリに戻ります。ただし、前述したように、Magento の更新によってディレクトリが上書きされるため、そのようなディレクトリには追加しないでください。
コンテンツブロックを追加
赤い悲劇は退屈です。それでは、ページにコンテンツを追加してみましょう。 local.xml の を次のように変更します
<参照名="ルート">
ルートに2つの埋め込みブロックを追加しました。 Magentoが配布し、顧客登録用のページを表示します。このブロックをルートに埋め込むには、simple_page.html で明示的に呼び出す必要があります。そこで、次のように Block の getChildHtml メソッドを使用します
キャッシュをクリアしてページをリロードします。この時点では、登録ページが赤い背景で表示されます。以下には、top.links というブロックもあります。以下を追加します
ページをリロードすると、リンクがレンダリングされていることがわかりますが、top.links にはレンダリングがありません。これは、local.xml に追加していないためです。レイアウトでは、getChildHtml には表示されているブロックのみを子ブロックとして含めることができます。これにより、Magento が必要なブロックをインスタンス化できるようになり、表示されたコンテンツに基づいてブロックに異なるテンプレートを設定できるようになります
local.xmlのtop.linksにブロックを追加できます
<参照名="ルート">
この時点でキャッシュをクリアすると、top.links モジュールの効果が確認できます

www.bkjia.com本当http://www.bkjia.com/PHPjc/477872.html技術記事このセクションでは、ビュー内のレイアウトとブロックに焦点を当てます。 他の主流の PHPMVC アーキテクチャとは異なり、magento の ActionController はデータ オブジェクトをビューに渡したり、View オブジェクトを設定したりしません...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

小紅書メモを削除する方法 小紅書メモを削除する方法 Mar 21, 2024 pm 08:12 PM

小紅書メモを削除するにはどうすればよいですか? メモは小紅書アプリで編集できます。ほとんどのユーザーは小紅書メモの削除方法を知りません。次に、エディターがユーザーに小紅書メモの削除方法に関する写真とテキストを提供します。チュートリアル、興味のあるユーザーが来て、それを受講してください見てください!小紅書使い方チュートリアル 小紅書メモの削除方法 1. まず小紅書アプリを開いてメインページに入り、右下隅の[自分]を選択して特別エリアに入ります; 2. 次に、マイエリアで、表示されているメモページをクリックします下の図で、削除したいメモを選択します; 3. メモページに入り、右上隅の [3 つの点] をクリックします; 4. 最後に、下部に機能バーが展開され、[削除] をクリックして完了します。

小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? 小紅書に投稿したメモが見つからない場合はどうすればよいですか?送信したばかりのメモが見つからない理由は何ですか? Mar 21, 2024 pm 09:30 PM

小紅書のユーザーとして、私たちは皆、公開されたノートが突然消えてしまう状況に遭遇したことがありますが、間違いなく混乱し、心配しています。この場合、どうすればよいでしょうか?この記事では、「小紅書が公開したメモが見つからない場合の対処方法」というテーマに焦点を当て、詳細な回答を提供します。 1. 小紅書が発行したメモが紛失した場合はどうすればよいですか?まず、パニックにならないでください。メモがなくなっていることに気づいた場合は、パニックに陥らず、落ち着いて行動することが重要です。これは、プラットフォームのシステム障害または操作エラーが原因である可能性があります。リリース記録の確認も簡単です。小紅書アプリを開き、「自分」→「公開」→「すべての出版物」をクリックするだけで、自分の出版記録を表示できます。ここでは、以前に公開されたノートを簡単に見つけることができます。 3.再投稿。見つかったら

おすすめのAI支援プログラミングツール4選 おすすめのAI支援プログラミングツール4選 Apr 22, 2024 pm 05:34 PM

この AI 支援プログラミング ツールは、急速な AI 開発のこの段階において、多数の有用な AI 支援プログラミング ツールを発掘しました。 AI 支援プログラミング ツールは、開発効率を向上させ、コードの品質を向上させ、バグ率を減らすことができます。これらは、現代のソフトウェア開発プロセスにおける重要なアシスタントです。今日は Dayao が 4 つの AI 支援プログラミング ツールを紹介します (すべて C# 言語をサポートしています)。皆さんのお役に立てれば幸いです。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot は、より少ない労力でより迅速にコードを作成できるようにする AI コーディング アシスタントであり、問​​題解決とコラボレーションにより集中できるようになります。ギット

小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル 小紅書でノートに商品リンクを追加する方法 小紅書でノートに商品リンクを追加するチュートリアル Mar 12, 2024 am 10:40 AM

小紅書でメモに商品リンクを追加するにはどうすればよいですか?小紅書アプリでは、ユーザーはさまざまなコンテンツを閲覧できるだけでなく、ショッピングもできるため、このアプリにはショッピングのおすすめや良い商品の共有に関するコンテンツがたくさんあります。このアプリでは、ショッピング体験を共有したり、協力してくれる販売者を見つけたり、メモにリンクを追加したりすることもできます。便利なだけでなく、専門家がいくつかの機能を備えているため、多くの人がこのアプリをショッピングに使用したいと考えています。興味深いコンテンツを閲覧して、自分に合った衣料品があるかどうかを確認できます。ノートに商品リンクを追加する方法を見てみましょう! 小紅書ノートに商品リンクを追加する方法 携帯電話のデスクトップでアプリを開きます。アプリのホームページをクリックします

Weibo で私の注意が他の人に気づかれないのはなぜですか? -Weiboの訪問者記録を確認するにはどうすればよいですか? Weibo で私の注意が他の人に気づかれないのはなぜですか? -Weiboの訪問者記録を確認するにはどうすればよいですか? Mar 18, 2024 am 11:22 AM

Weibo で私の注意が他の人に気づかれないのはなぜですか?他の人にフォローしていることが分からないように、ブロガーを「静かにフォローする」グループに分類するだけです。 1. 携帯電話で Weibo を開き、ホームページの [フォロー] をクリックします。 2.「マイグループ」の[静かにフォローする]をクリックします。 Weibo の訪問者記録を確認するにはどうすればよいですか? 1. Weibo でテストされている訪問者記録機能は、現在 SVIP と VVIP のみに公開されており、一部のユーザーのみに公開されています。 2. ユーザーはパーソナルセンターの下の[その他の機能]に訪問者記録の入り口があり、訪問者数、訪問者、およびより頻繁に訪問する人々を確認できます。 3. 本機能はSVIPおよびVVIPユーザーのみが利用できる機能であり、一般ユーザーおよび一般会員ユーザーは一時的に利用できなくなります。 4. つまり、Weibo テスト訪問者

Go 言語を使用してモバイル アプリケーションを開発する方法を学ぶ Go 言語を使用してモバイル アプリケーションを開発する方法を学ぶ Mar 28, 2024 pm 10:00 PM

Go 言語開発モバイル アプリケーション チュートリアル モバイル アプリケーション市場が活況を続ける中、ますます多くの開発者が Go 言語を使用してモバイル アプリケーションを開発する方法を検討し始めています。シンプルで効率的なプログラミング言語として、Go 言語はモバイル アプリケーション開発でも大きな可能性を示しています。この記事では、Go 言語を使用してモバイル アプリケーションを開発する方法を詳しく紹介し、読者がすぐに始めて独自のモバイル アプリケーションの開発を開始できるように、具体的なコード例を添付します。 1. 準備 始める前に、開発環境とツールを準備する必要があります。頭

どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る Apr 07, 2024 am 09:10 AM

世界初の AI プログラマー Devin の誕生から 1 か月も経たない 2022 年 3 月 3 日、プリンストン大学の NLP チームはオープンソース AI プログラマー SWE-agent を開発しました。 GPT-4 モデルを利用して、GitHub リポジトリの問題を自動的に解決します。 SWE ベンチ テスト セットにおける SWE エージェントのパフォーマンスは Devin と同様で、平均 93 秒かかり、問題の 12.29% を解決しました。専用端末と対話することで、SWE エージェントはファイルの内容を開いて検索したり、自動構文チェックを使用したり、特定の行を編集したり、テストを作成して実行したりできます。 (注: 上記の内容は元の内容を若干調整したものですが、原文の重要な情報は保持されており、指定された文字数制限を超えていません。) SWE-A

最も人気のある 5 つの Go 言語ライブラリの概要: 開発に不可欠なツール 最も人気のある 5 つの Go 言語ライブラリの概要: 開発に不可欠なツール Feb 22, 2024 pm 02:33 PM

最も人気のある 5 つの Go 言語ライブラリの概要: 特定のコード例が必要な、開発に不可欠なツール Go 言語は、その誕生以来、広く注目され、応用されてきました。新しい効率的で簡潔なプログラミング言語としての Go の急速な開発は、豊富なオープンソース ライブラリのサポートと切り離すことができません。この記事では、Go 言語ライブラリの中で最も人気のある 5 つを紹介します. これらのライブラリは Go 開発において重要な役割を果たし、開発者に強力な機能と便利な開発エクスペリエンスを提供します。同時に、これらのライブラリの用途と機能をよりよく理解するために、具体的なコード例を示して説明します。

See all articles