如何在smarty中增加类似foreach的功能自动加载数据_php技巧
在smarty中使用自定义插件来加载数据(见:编写Smarty插件在模板中直接加载数据的详细介绍),在使用的时候还是感觉不够方便,灵机一动就想写成类似foreach那种标签:
第一步:在Smarty_Compiler.class.php的_compile_tag函数中增加:
//加载数据的开始标签
case 'load':
$this->_push_tag('load');
return $this->_complie_load_start($tag_args);
break;
//加载数据的结束标签
case '/load':
$this->_pop_tag('load');
return "";
break;
第二步:增加一个方法:
/**
* 加载数据
* @param $tag_args
*/
function _complie_load_start($tag_args)
{
$key = substr(md5($tag_args), 8, 16); //根据参数生成一个特殊的变量名
$attrs = $this->_parse_attrs($tag_args);
//这里可以增加更多的处理
$class = (!isset($attrs['class']) || empty($attrs['class'])) ? 'cls_crud' : trim($attrs['class']);
(!isset($attrs['table']) || empty($attrs['table'])) && exit('`table` is empty!');
$db = $class::factory(array('table' => substr($attrs['table'], 1, -1)));
//定义新变量
$this->_tpl_vars[$key] = $db->get_block_list(array(substr($attrs['where'], 1, -1)), $attrs['limit']);
$tag_args = "from=/${$key} " . $tag_args;
//调用foreach标签处理函数进行处理
return $this->_compile_foreach_start($tag_args);
}
这样就可以在模板中使用load这个标签了。用法例如:
{load table="test" where="`id` ...
{/load}

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









1. Iterator と foreach の違いはポリモーフィックな違いです (foreach の最下層は Iterator です) Iterator はインターフェイス型であり、コレクションや配列の型を気にしません; for と foreach の両方がコレクションの型を知る必要がありますまず、コレクション内の要素の種類についても; 1. foreach の最下層はイテレータによって記述されたコードであると言われる理由: 逆コンパイルされたコード: 2. foreach の削除とイテレータの違い まず、Alibaba を見てください。 Java 開発マニュアル。ただし、ケース 1 ではエラーは報告されず、ケース 2 (java.util.ConcurrentModificationException) では最初にエラーが報告されます。

PHP が foreach ループの数を決定する手順: 1. "$fruits" の配列を作成します; 2. 初期値 0 でカウンタ変数 "$counter" を作成します; 3. "foreach" を使用してループします配列を介してループ本体内のカウンタ変数の値を増加させ、各要素とそのインデックスを出力します; 4. foreach ループの外側にカウンタ変数の値を出力し、ループがどの要素に到達したかを確認します。

この記事では、PHP がどのようにしてキー値を反転した後に配列を返すのかについて詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP キー値フリップ 配列キー値フリップは、配列内のキーと値を交換して、元のキーを値として、元の値をキーとして持つ新しい配列を生成する配列に対する操作です。実装方法 PHP では、次の方法で配列のキーと値の反転を実行できます。 array_flip() 関数: array_flip() 関数は、キーと値の反転操作に特に使用されます。引数として配列を受け取り、キーと値が交換された新しい配列を返します。 $original_array=[

この記事では、PHP が返す配列の現在の要素について詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP 配列内の現在の要素を取得する PHP には、配列内の現在の要素を取得するなど、配列にアクセスして操作するためのさまざまなメソッドが用意されています。以下に、一般的に使用されるいくつかの手法を紹介します。 1. current() 関数 current() 関数は、配列の内部ポインタが現在指している要素を返します。ポインタは最初、配列の最初の要素を指します。次の構文を使用します。 $currentElement=current($array);2.key() function key() 関数は、現在要素を指している配列内部ポインタを返します。

違い: 1. for はインデックスを介して各データ要素をループしますが、forEach は JS の基礎となるプログラムを介して配列のデータ要素をループします; 2. for はbreak キーワードを使用してループの実行を終了できますが、forEach はそれができません; 3 . forはループ変数の値を制御することでループの実行を制御できるが、forEachはできない; 4. forはループ外でループ変数を呼び出すことができるが、forEachはループ外でループ変数を呼び出すことができない; 5. forの実行効率forEach よりも高いです。

現在、Web サイト開発は重要なコンポーネント テンプレート エンジンから切り離せません。テンプレート エンジンとは、ページ テンプレートとデータを組み合わせて特定の形式の HTML コードを生成するツールを指します。テンプレート エンジンはコードの重複を大幅に削減し、ページのダイナミクスを向上させることができるため、さまざまな Web サイト開発フレームワークにおいて、テンプレート エンジンは不可欠なコンポーネントです。最も一般的で人気のあるテンプレート エンジンの 1 つは Smarty です。 Smarty は DSL (DomainSpecif

現代の Web 開発では、フロントエンドとバックエンドの分離が非常に一般的な傾向になっており、これにより開発者はプロジェクトをより適切に組織し、プロジェクト開発の効率を向上させることができます。 PHP と Smarty は非常によく使用される 2 つのテクノロジであり、フロントエンドとバックエンドの分離開発を実現するために使用できます。この記事では、PHPとSmartyを使ってフロントエンドとバックエンドの分離開発を実現する方法を紹介します。フロントエンドとバックエンドの分離開発とは何ですか? 従来の Web 開発では、フロントエンドは主にページのプレゼンテーションとバックエンドとの対話ロジックを担当します。バックエンドは主にビジネスを担当します

PHP 開発者として、テンプレート エンジンを使用するのは自然な選択です。 Smarty は、HTML/CSS/JavaScript を PHP コードから分離する方法を提供する人気のテンプレート エンジンで、開発者がプロジェクトをより適切に整理および管理できるようにします。この記事では、PHP 開発中に Smarty テンプレート エンジンを使用する方法を学びます。 1. Smarty をインストールする 前に、Smarty をインストールする必要があります。この記事では、Composer を使用してインストールします
