mirror of
https://github.com/codeigniter4/CodeIgniter4.git
synced 2025-02-20 11:44:28 +08:00
1413 lines
108 KiB
HTML
1413 lines
108 KiB
HTML
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" >
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>View Parser — CodeIgniter 4.4.3 documentation</title>
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/css/citheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/css/citheme_dark.css" type="text/css" />
|
||
<link rel="shortcut icon" href="../_static/favicon.ico"/>
|
||
<!--[if lt IE 9]>
|
||
<script src="../_static/js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
|
||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/js/citheme.js"></script>
|
||
<script src="../_static/js/carbon.js"></script>
|
||
<script src="../_static/js/theme.js"></script>
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="next" title="View Decorators" href="view_decorators.html" />
|
||
<link rel="prev" title="View Layouts" href="view_layouts.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="../index.html">
|
||
|
||
<img src="../_static/ci-logo-text.svg" class="logo" alt="Logo"/>
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../intro/index.html">Welcome to CodeIgniter4</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/index.html">Welcome to CodeIgniter4</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/requirements.html">Server Requirements</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/credits.html">Credits</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../intro/psr.html">PSR Compliance</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../license.html">License Agreement</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html">Installation</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/installing_composer.html">Composer Installation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/installing_manual.html">Manual Installation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/running.html">Running Your App</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/troubleshooting.html">Troubleshooting</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../changelogs/index.html">Change Logs</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/upgrading.html">Upgrading From a Previous Version</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../installation/repositories.html">CodeIgniter Repositories</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../tutorial/index.html">Build Your First Application</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/static_pages.html">Static Pages</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/news_section.html">News Section</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/create_news_items.html">Create News Items</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../tutorial/conclusion.html">Conclusion</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../concepts/index.html">CodeIgniter4 Overview</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/structure.html">Application Structure</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/mvc.html">Models, Views, and Controllers</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/autoloader.html">Autoloading Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/services.html">Services</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/factories.html">Factories</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/http.html">Working with HTTP Requests</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../concepts/security.html">Security Guidelines</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../general/index.html">General Topics</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/configuration.html">Configuration</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/urls.html">CodeIgniter URLs</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/helpers.html">Helper Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/common_functions.html">Global Functions and Constants</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/logging.html">Logging Information</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/errors.html">Error Handling</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/caching.html">Web Page Caching</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/ajax.html">AJAX Requests</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/modules.html">Code Modules</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/managing_apps.html">Managing your Applications</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../general/environments.html">Handling Multiple Environments</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../incoming/index.html">Controllers and Routing</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/routing.html">URI Routing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/controllers.html">Controllers</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/filters.html">Controller Filters</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/message.html">HTTP Messages</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/request.html">Request Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/incomingrequest.html">IncomingRequest Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/content_negotiation.html">Content Negotiation</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/methodspoofing.html">HTTP Method Spoofing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../incoming/restful.html">RESTful Resource Handling</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul class="current">
|
||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Building Responses</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="views.html">Views</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="view_cells.html">View Cells</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="view_renderer.html">View Renderer</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="view_layouts.html">View Layouts</a></li>
|
||
<li class="toctree-l2 current"><a class="current reference internal" href="#">View Parser</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="view_decorators.html">View Decorators</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="table.html">HTML Table Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="response.html">HTTP Responses</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="api_responses.html">API Response Trait</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="csp.html">Content Security Policy</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="localization.html">Localization</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="alternative_php.html">Alternate PHP Syntax for View Files</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../database/index.html">Working with Databases</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/examples.html">Quick Start: Usage Examples</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/configuration.html">Database Configuration</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/connecting.html">Connecting to a Database</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/queries.html">Running Queries</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/results.html">Generating Query Results</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/helpers.html">Query Helper Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/query_builder.html">Query Builder Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/transactions.html">Transactions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/metadata.html">Getting MetaData</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/call_function.html">Custom Function Calls</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/events.html">Database Events</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../database/utilities.html">Database Utilities</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../models/index.html">Modeling Data</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../models/model.html">Using CodeIgniter's Model</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../models/entities.html">Using Entity Classes</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../dbmgmt/index.html">Managing Databases</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/forge.html">Database Manipulation with Database Forge</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/migration.html">Database Migrations</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/seeds.html">Database Seeding</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../dbmgmt/db_commands.html">Database Commands</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../libraries/index.html">Library Reference</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/caching.html">Caching Driver</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/cookies.html">Cookies</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/curlrequest.html">CURLRequest Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/email.html">Email Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/encryption.html">Encryption Service</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/files.html">Working with Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/file_collections.html">File Collections</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/honeypot.html">Honeypot Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/images.html">Image Manipulation Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/pagination.html">Pagination</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/publisher.html">Publisher</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/security.html">Security</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/sessions.html">Session Library</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/throttler.html">Throttler</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/time.html">Times and Dates</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/typography.html">Typography</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/uploaded_files.html">Working with Uploaded Files</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/uri.html">Working with URIs</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/user_agent.html">User Agent Class</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../libraries/validation.html">Validation</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../helpers/index.html">Helpers</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/array_helper.html">Array Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/cookie_helper.html">Cookie Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/date_helper.html">Date Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/filesystem_helper.html">Filesystem Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/form_helper.html">Form Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/html_helper.html">HTML Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/inflector_helper.html">Inflector Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/number_helper.html">Number Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/security_helper.html">Security Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/test_helper.html">Test Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/text_helper.html">Text Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/url_helper.html">URL Helper</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../helpers/xml_helper.html">XML Helper</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../testing/index.html">Testing</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/overview.html">Getting Started</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/database.html">Database</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/fabricator.html">Generating Data</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/controllers.html">Controller Testing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/feature.html">HTTP Testing</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/response.html">Testing Responses</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/benchmark.html">Benchmarking</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/debugging.html">Debugging Your Application</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../testing/mocking.html">Mocking</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../cli/index.html">Command Line Usage</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_overview.html">CLI Overview</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_controllers.html">Running Controllers via CLI</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/spark_commands.html">Spark Commands</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_commands.html">Creating Spark Commands</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_generators.html">CLI Generators</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_library.html">CLI Library</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../cli/cli_request.html">CLIRequest Class</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../extending/index.html">Extending CodeIgniter</a><ul>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/core_classes.html">Creating Core System Classes</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/common.html">Replacing Common Functions</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/events.html">Events</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/basecontroller.html">Extending the Controller</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/authentication.html">Authentication</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/composer_packages.html">Creating Composer Packages</a></li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../extending/contributing.html">Contributing to CodeIgniter</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../libraries/official_packages.html">Official Packages</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../index.html">CodeIgniter</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<a class="btn btn-neutral float-right" href="https://github.com/codeigniter4/CodeIgniter4/edit/develop/user_guide_src/source/outgoing/view_parser.rst">Edit this page</a>
|
||
|
||
<div role="navigation" aria-label="Page navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item"><a href="index.html">Building Responses</a></li>
|
||
<li class="breadcrumb-item active">View Parser</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<section id="view-parser">
|
||
<h1>View Parser<a class="headerlink" href="#view-parser" title="Permalink to this headline"></a></h1>
|
||
<div class="contents local topic" id="contents">
|
||
<ul class="simple">
|
||
<li><p><a class="reference internal" href="#using-the-view-parser-class" id="id1">Using the View Parser Class</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#what-it-does" id="id2">What It Does</a></p></li>
|
||
<li><p><a class="reference internal" href="#parser-templates" id="id3">Parser templates</a></p></li>
|
||
<li><p><a class="reference internal" href="#parser-configuration-options" id="id4">Parser Configuration Options</a></p></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><a class="reference internal" href="#substitution-variations" id="id5">Substitution Variations</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#loop-substitutions" id="id6">Loop Substitutions</a></p></li>
|
||
<li><p><a class="reference internal" href="#nested-substitutions" id="id7">Nested Substitutions</a></p></li>
|
||
<li><p><a class="reference internal" href="#comments" id="id8">Comments</a></p></li>
|
||
<li><p><a class="reference internal" href="#cascading-data" id="id9">Cascading Data</a></p></li>
|
||
<li><p><a class="reference internal" href="#preventing-parsing" id="id10">Preventing Parsing</a></p></li>
|
||
<li><p><a class="reference internal" href="#conditional-logic" id="id11">Conditional Logic</a></p></li>
|
||
<li><p><a class="reference internal" href="#escaping-data" id="id12">Escaping Data</a></p></li>
|
||
<li><p><a class="reference internal" href="#filters" id="id13">Filters</a></p></li>
|
||
<li><p><a class="reference internal" href="#parser-plugins" id="id14">Parser Plugins</a></p></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><a class="reference internal" href="#usage-notes" id="id15">Usage Notes</a></p>
|
||
<ul>
|
||
<li><p><a class="reference internal" href="#view-fragments" id="id16">View Fragments</a></p></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><a class="reference internal" href="#namespace-CodeIgniter\View" id="id17">Class Reference</a></p></li>
|
||
</ul>
|
||
</div>
|
||
<p>The View Parser can perform simple text substitution for
|
||
pseudo-variables contained within your view files.
|
||
It can parse simple variables or variable tag pairs.</p>
|
||
<p>Pseudo-variable names or control constructs are enclosed in braces, like this:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">html</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">head</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">title</span><span class="o">></span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span><span class="o"></</span><span class="nx">title</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">head</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">body</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">h3</span><span class="o">></span><span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o"></</span><span class="nx">h3</span><span class="o">></span>
|
||
|
||
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h5</span><span class="o">></span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o"></</span><span class="nx">h5</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o"></</span><span class="nx">p</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
|
||
<span class="o"></</span><span class="nx">body</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">html</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>These variables are not actual PHP variables, but rather plain text
|
||
representations that allow you to eliminate PHP from your templates
|
||
(view files).</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>CodeIgniter does <strong>not</strong> require you to use this class since
|
||
using pure PHP in your view pages (for instance using the
|
||
<a class="reference internal" href="view_renderer.html"><span class="doc">View renderer</span></a> )
|
||
lets them run a little faster.
|
||
However, some developers prefer to use some form of template engine if
|
||
they work with designers who they feel would find some
|
||
confusion working with PHP.</p>
|
||
</div>
|
||
<section id="using-the-view-parser-class">
|
||
<h2><a class="toc-backref" href="#id1">Using the View Parser Class</a><a class="headerlink" href="#using-the-view-parser-class" title="Permalink to this headline"></a></h2>
|
||
<p>The simplest method to load the parser class is through its service:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span> <span class="o">=</span> <span class="nx">\Config\Services</span><span class="o">::</span><span class="na">parser</span><span class="p">();</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Alternately, if you are not using the <code class="docutils literal notranslate"><span class="pre">Parser</span></code> class as your default renderer, you
|
||
can instantiate it directly:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\CodeIgniter\View\Parser</span><span class="p">();</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Then you can use any of the three standard rendering methods that it provides:
|
||
<code class="docutils literal notranslate"><span class="pre">render()</span></code>, <code class="docutils literal notranslate"><span class="pre">setVar()</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">setData()</span></code>. You will also be able to specify delimiters directly,
|
||
through the <code class="docutils literal notranslate"><span class="pre">setDelimiters()</span></code> method.</p>
|
||
<div class="admonition important">
|
||
<p class="admonition-title">Important</p>
|
||
<p>Using the <code class="docutils literal notranslate"><span class="pre">Parser</span></code>, your view templates are processed only by the Parser
|
||
itself, and not like a conventional view PHP script. PHP code in such a script
|
||
is ignored by the parser, and only substitutions are performed.</p>
|
||
<p>This is purposeful: view files with no PHP.</p>
|
||
</div>
|
||
<section id="what-it-does">
|
||
<h3><a class="toc-backref" href="#id2">What It Does</a><a class="headerlink" href="#what-it-does" title="Permalink to this headline"></a></h3>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">Parser</span></code> class processes “PHP/HTML scripts” stored in the application’s view path.
|
||
These scripts can not contain any PHP.</p>
|
||
<p>Each view parameter (which we refer to as a pseudo-variable) triggers a substitution,
|
||
based on the type of value you provided for it. Pseudo-variables are not
|
||
extracted into PHP variables; instead their value is accessed through the pseudo-variable
|
||
syntax, where its name is referenced inside braces.</p>
|
||
<p>The Parser class uses an associative array internally, to accumulate pseudo-variable
|
||
settings until you call its <code class="docutils literal notranslate"><span class="pre">render()</span></code>. This means that your pseudo-variable names
|
||
need to be unique, or a later parameter setting will over-ride an earlier one.</p>
|
||
<p>This also impacts escaping parameter values for different contexts inside your
|
||
script. You will have to give each escaped value a unique parameter name.</p>
|
||
</section>
|
||
<section id="parser-templates">
|
||
<h3><a class="toc-backref" href="#id3">Parser templates</a><a class="headerlink" href="#parser-templates" title="Permalink to this headline"></a></h3>
|
||
<p>You can use the <code class="docutils literal notranslate"><span class="pre">render()</span></code> method to parse (or render) simple templates,
|
||
like this:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'blog_title'</span> <span class="o">=></span> <span class="s1">'My Blog Title'</span><span class="p">,</span>
|
||
<span class="s1">'blog_heading'</span> <span class="o">=></span> <span class="s1">'My Blog Heading'</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'blog_template'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>View parameters are passed to <code class="docutils literal notranslate"><span class="pre">setData()</span></code> as an associative
|
||
array of data to be replaced in the template. In the above example, the
|
||
template would contain two variables: <code class="docutils literal notranslate"><span class="pre">{blog_title}</span></code> and <code class="docutils literal notranslate"><span class="pre">{blog_heading}</span></code>
|
||
The first parameter to <code class="docutils literal notranslate"><span class="pre">render()</span></code> contains the name of the <a class="reference internal" href="views.html"><span class="doc">view
|
||
file</span></a>, Where <em>blog_template</em> is the name of your view file.</p>
|
||
<div class="admonition important">
|
||
<p class="admonition-title">Important</p>
|
||
<p>If the file extension is omitted, then the views are expected to end with the .php extension.</p>
|
||
</div>
|
||
</section>
|
||
<section id="parser-configuration-options">
|
||
<h3><a class="toc-backref" href="#id4">Parser Configuration Options</a><a class="headerlink" href="#parser-configuration-options" title="Permalink to this headline"></a></h3>
|
||
<p>Several options can be passed to the <code class="docutils literal notranslate"><span class="pre">render()</span></code> or <code class="docutils literal notranslate"><span class="pre">renderString()</span></code> methods.</p>
|
||
<ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cache</span></code> - the time in seconds, to save a view’s results; ignored for renderString()</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cache_name</span></code> - the ID used to save/retrieve a cached view result; defaults to the viewpath;
|
||
ignored for renderString()</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">saveData</span></code> - true if the view data parameters should be retained for subsequent calls;
|
||
default is <strong>true</strong></p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> - true if pseudo-variable settings should be passed on to nested
|
||
substitutions; default is <strong>true</strong></p></li>
|
||
</ul>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'blog_template'</span><span class="p">,</span> <span class="p">[</span>
|
||
<span class="s1">'cache'</span> <span class="o">=></span> <span class="nx">HOUR</span><span class="p">,</span>
|
||
<span class="s1">'cache_name'</span> <span class="o">=></span> <span class="s1">'something_unique'</span><span class="p">,</span>
|
||
<span class="p">]);</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="substitution-variations">
|
||
<h2><a class="toc-backref" href="#id5">Substitution Variations</a><a class="headerlink" href="#substitution-variations" title="Permalink to this headline"></a></h2>
|
||
<p>There are three types of substitution supported: simple, looping, and nested.
|
||
Substitutions are performed in the same sequence that pseudo-variables were added.</p>
|
||
<p>The <strong>simple substitution</strong> performed by the parser is a one-to-one
|
||
replacement of pseudo-variables where the corresponding data parameter
|
||
has either a scalar or string value, as in this example:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'<head><title>{blog_title}</title></head>'</span><span class="p">;</span>
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'blog_title'</span> <span class="o">=></span> <span class="s1">'My ramblings'</span><span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
<span class="c1">// Result: <head><title>My ramblings</title></head></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">Parser</span></code> takes substitution a lot further with “variable pairs”,
|
||
used for nested substitutions or looping, and with some advanced
|
||
constructs for conditional substitution.</p>
|
||
<p>When the parser executes, it will generally</p>
|
||
<ul class="simple">
|
||
<li><p>handle any conditional substitutions</p></li>
|
||
<li><p>handle any nested/looping substitutions</p></li>
|
||
<li><p>handle the remaining single substitutions</p></li>
|
||
</ul>
|
||
<section id="loop-substitutions">
|
||
<h3><a class="toc-backref" href="#id6">Loop Substitutions</a><a class="headerlink" href="#loop-substitutions" title="Permalink to this headline"></a></h3>
|
||
<p>A loop substitution happens when the value for a pseudo-variable is
|
||
a sequential array of arrays, like an array of row settings.</p>
|
||
<p>The above example code allows simple variables to be replaced. What if
|
||
you would like an entire block of variables to be repeated, with each
|
||
iteration containing new values? Consider the template example we showed
|
||
at the top of the page:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">html</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">head</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">title</span><span class="o">></span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span><span class="o"></</span><span class="nx">title</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">head</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">body</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">h3</span><span class="o">></span><span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o"></</span><span class="nx">h3</span><span class="o">></span>
|
||
|
||
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h5</span><span class="o">></span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o"></</span><span class="nx">h5</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o"></</span><span class="nx">p</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
|
||
<span class="o"></</span><span class="nx">body</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">html</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>In the above code you’ll notice a pair of variables: <code class="docutils literal notranslate"><span class="pre">{blog_entries}</span></code>
|
||
data… <code class="docutils literal notranslate"><span class="pre">{/blog_entries}</span></code>. In a case like this, the entire chunk of data
|
||
between these pairs would be repeated multiple times, corresponding to
|
||
the number of rows in the “blog_entries” element of the parameters array.</p>
|
||
<p>Parsing variable pairs is done using the identical code shown above to
|
||
parse single variables, except, you will add a multi-dimensional array
|
||
corresponding to your variable pair data. Consider this example:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'blog_title'</span> <span class="o">=></span> <span class="s1">'My Blog Title'</span><span class="p">,</span>
|
||
<span class="s1">'blog_heading'</span> <span class="o">=></span> <span class="s1">'My Blog Heading'</span><span class="p">,</span>
|
||
<span class="s1">'blog_entries'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 1'</span><span class="p">,</span> <span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 1'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 2'</span><span class="p">,</span> <span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 2'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 3'</span><span class="p">,</span> <span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 3'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 4'</span><span class="p">,</span> <span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 4'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 5'</span><span class="p">,</span> <span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 5'</span><span class="p">],</span>
|
||
<span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'blog_template'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The value for the pseudo-variable <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code> is a sequential
|
||
array of associative arrays. The outer level does not have keys associated
|
||
with each of the nested “rows”.</p>
|
||
<p>If your “pair” data is coming from a database result, which is already a
|
||
multi-dimensional array, you can simply use the database <code class="docutils literal notranslate"><span class="pre">getResultArray()</span></code>
|
||
method:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$query</span> <span class="o">=</span> <span class="nv">$db</span><span class="o">-></span><span class="na">query</span><span class="p">(</span><span class="s1">'SELECT * FROM blog'</span><span class="p">);</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'blog_title'</span> <span class="o">=></span> <span class="s1">'My Blog Title'</span><span class="p">,</span>
|
||
<span class="s1">'blog_heading'</span> <span class="o">=></span> <span class="s1">'My Blog Heading'</span><span class="p">,</span>
|
||
<span class="s1">'blog_entries'</span> <span class="o">=></span> <span class="nv">$query</span><span class="o">-></span><span class="na">getResultArray</span><span class="p">(),</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'blog_template'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If the array you are trying to loop over contains objects instead of arrays,
|
||
the parser will first look for an <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method on the object. If it exists,
|
||
that method will be called and the resulting array is then looped over just as
|
||
described above. If no <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method exists, the object will be cast as
|
||
an array and its public properties will be made available to the Parser.</p>
|
||
<p>This is especially useful with the Entity classes, which has an <code class="docutils literal notranslate"><span class="pre">asArray()</span></code> method
|
||
that returns all public and protected properties (minus the _options property) and
|
||
makes them available to the Parser.</p>
|
||
</section>
|
||
<section id="nested-substitutions">
|
||
<h3><a class="toc-backref" href="#id7">Nested Substitutions</a><a class="headerlink" href="#nested-substitutions" title="Permalink to this headline"></a></h3>
|
||
<p>A nested substitution happens when the value for a pseudo-variable is
|
||
an associative array of values, like a record from a database:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'blog_title'</span> <span class="o">=></span> <span class="s1">'My Blog Title'</span><span class="p">,</span>
|
||
<span class="s1">'blog_heading'</span> <span class="o">=></span> <span class="s1">'My Blog Heading'</span><span class="p">,</span>
|
||
<span class="s1">'blog_entries'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span>
|
||
<span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Title 1'</span><span class="p">,</span>
|
||
<span class="s1">'body'</span> <span class="o">=></span> <span class="s1">'Body 1'</span><span class="p">,</span>
|
||
<span class="p">],</span>
|
||
<span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'blog_template'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The value for the pseudo-variable <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code> is an associative
|
||
array. The key/value pairs defined inside it will be exposed inside
|
||
the variable pair loop for that variable.</p>
|
||
<p>A <strong>blog_template.php</strong> that might work for the above:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="p">{</span><span class="nx">blog_title</span><span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="nx">blog_heading</span><span class="p">}</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">div</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">h2</span><span class="o">></span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o"></</span><span class="nx">h2</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o"></</span><span class="nx">p</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">div</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entries</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If you would like the other pseudo-variables accessible inside the <code class="docutils literal notranslate"><span class="pre">blog_entries</span></code>
|
||
scope, then make sure that the <code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> option is set to true.</p>
|
||
</section>
|
||
<section id="comments">
|
||
<h3><a class="toc-backref" href="#id8">Comments</a><a class="headerlink" href="#comments" title="Permalink to this headline"></a></h3>
|
||
<p>You can place comments in your templates that will be ignored and removed during parsing by wrapping the
|
||
comments in a <code class="docutils literal notranslate"><span class="pre">{#</span>  <span class="pre">#}</span></code> symbols.</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="c1"># This comment is removed during parsing. #}</span>
|
||
<span class="p">{</span><span class="nx">blog_entry</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">div</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">h2</span><span class="o">></span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o"></</span><span class="nx">h2</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">p</span><span class="o">></span><span class="p">{</span><span class="nx">body</span><span class="p">}</span><span class="o"></</span><span class="nx">p</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">div</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">/</span><span class="nx">blog_entry</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="cascading-data">
|
||
<h3><a class="toc-backref" href="#id9">Cascading Data</a><a class="headerlink" href="#cascading-data" title="Permalink to this headline"></a></h3>
|
||
<p>With both a nested and a loop substitution, you have the option of cascading
|
||
data pairs into the inner substitution.</p>
|
||
<p>The following example is not impacted by cascading:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'{name} lives in {locations}{city} on {planet}{/locations}.'</span><span class="p">;</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'George'</span><span class="p">,</span>
|
||
<span class="s1">'locations'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'city'</span> <span class="o">=></span> <span class="s1">'Red City'</span><span class="p">,</span> <span class="s1">'planet'</span> <span class="o">=></span> <span class="s1">'Mars'</span><span class="p">],</span>
|
||
<span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
<span class="c1">// Result: George lives in Red City on Mars.</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This example gives different results, depending on cascading:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'{locations}{name} lives in {city} on {planet}{/locations}.'</span><span class="p">;</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'George'</span><span class="p">,</span>
|
||
<span class="s1">'locations'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'city'</span> <span class="o">=></span> <span class="s1">'Red City'</span><span class="p">,</span> <span class="s1">'planet'</span> <span class="o">=></span> <span class="s1">'Mars'</span><span class="p">],</span>
|
||
<span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">,</span> <span class="p">[</span><span class="s1">'cascadeData'</span> <span class="o">=></span> <span class="k">false</span><span class="p">]);</span>
|
||
<span class="c1">// Result: {name} lives in Red City on Mars.</span>
|
||
|
||
<span class="c1">// or</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">,</span> <span class="p">[</span><span class="s1">'cascadeData'</span> <span class="o">=></span> <span class="k">true</span><span class="p">]);</span>
|
||
<span class="c1">// Result: George lives in Red City on Mars.</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="preventing-parsing">
|
||
<h3><a class="toc-backref" href="#id10">Preventing Parsing</a><a class="headerlink" href="#preventing-parsing" title="Permalink to this headline"></a></h3>
|
||
<p>You can specify portions of the page to not be parsed with the <code class="docutils literal notranslate"><span class="pre">{noparse}</span></code> <code class="docutils literal notranslate"><span class="pre">{/noparse}</span></code> tag pair. Anything in this
|
||
section will stay exactly as it is, with no variable substitution, looping, etc, happening to the markup between the brackets.</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="nx">noparse</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Untouched</span> <span class="nx">Code</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">/</span><span class="nx">noparse</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="conditional-logic">
|
||
<h3><a class="toc-backref" href="#id11">Conditional Logic</a><a class="headerlink" href="#conditional-logic" title="Permalink to this headline"></a></h3>
|
||
<p>The Parser class supports some basic conditionals to handle <code class="docutils literal notranslate"><span class="pre">if</span></code>, <code class="docutils literal notranslate"><span class="pre">else</span></code>, and <code class="docutils literal notranslate"><span class="pre">elseif</span></code> syntax. All <code class="docutils literal notranslate"><span class="pre">if</span></code>
|
||
blocks must be closed with an <code class="docutils literal notranslate"><span class="pre">endif</span></code> tag:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">'admin'</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o">!</</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="k">endif</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This simple block is converted to the following during parsing:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span> <span class="k">if</span> <span class="p">(</span><span class="nv">$role</span> <span class="o">===</span> <span class="s1">'admin'</span><span class="p">)</span><span class="o">:</span> <span class="cp">?></span>
|
||
<span class="p"><</span><span class="nt">h1</span><span class="p">></span>Welcome, Admin!<span class="p"></</span><span class="nt">h1</span><span class="p">></span>
|
||
<span class="cp"><?php</span> <span class="k">endif</span> <span class="cp">?></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>All variables used within if statements must have been previously set with the same name. Other than that, it is
|
||
treated exactly like a standard PHP conditional, and all standard PHP rules would apply here. You can use any
|
||
of the comparison operators you would normally, like <code class="docutils literal notranslate"><span class="pre">==</span></code>, <code class="docutils literal notranslate"><span class="pre">===</span></code>, <code class="docutils literal notranslate"><span class="pre">!==</span></code>, <code class="docutils literal notranslate"><span class="pre"><</span></code>, <code class="docutils literal notranslate"><span class="pre">></span></code>, etc.</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">'admin'</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="k">elseif</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">'moderator'</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Moderator</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="k">else</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">User</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="k">endif</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>In the background, conditionals are parsed using an <code class="docutils literal notranslate"><span class="pre">eval()</span></code>, so you must ensure that you take
|
||
care with the user data that is used within conditionals, or you could open your application up to security risks.</p>
|
||
</div>
|
||
<section id="changing-the-conditional-delimiters">
|
||
<h4>Changing the Conditional Delimiters<a class="headerlink" href="#changing-the-conditional-delimiters" title="Permalink to this headline"></a></h4>
|
||
<p>If you have JavaScript code like the following in your templates, the Parser raises a syntax error because there are strings that can be interpreted as a conditional:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">script</span> <span class="nx">type</span><span class="o">=</span><span class="s2">"text/javascript"</span><span class="o">></span>
|
||
<span class="k">var</span> <span class="nx">f</span> <span class="o">=</span> <span class="k">function</span><span class="p">()</span> <span class="p">{</span>
|
||
<span class="k">if</span> <span class="p">(</span><span class="nx">hasAlert</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="nx">alert</span><span class="p">(</span><span class="s1">'{message}'</span><span class="p">);</span>
|
||
<span class="p">}</span>
|
||
<span class="p">}</span>
|
||
<span class="o"></</span><span class="nx">script</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>In that case, you can change the delimiters for conditionals with the <code class="docutils literal notranslate"><span class="pre">setConditionalDelimiters()</span></code> method to avoid misinterpretations:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span><span class="o">-></span><span class="na">setConditionalDelimiters</span><span class="p">(</span><span class="s1">'{%'</span><span class="p">,</span> <span class="s1">'%}'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>In this case, you will write code in your template:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">%</span> <span class="k">if</span> <span class="nv">$role</span><span class="o">==</span><span class="s1">'admin'</span> <span class="o">%</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">Admin</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">%</span> <span class="k">else</span> <span class="o">%</span><span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">h1</span><span class="o">></span><span class="nx">Welcome</span><span class="p">,</span> <span class="nx">User</span><span class="o"></</span><span class="nx">h1</span><span class="o">></span>
|
||
<span class="p">{</span><span class="o">%</span> <span class="k">endif</span> <span class="o">%</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="escaping-data">
|
||
<h3><a class="toc-backref" href="#id12">Escaping Data</a><a class="headerlink" href="#escaping-data" title="Permalink to this headline"></a></h3>
|
||
<p>By default, all variable substitution is escaped to help prevent XSS attacks on your pages. CodeIgniter’s <code class="docutils literal notranslate"><span class="pre">esc()</span></code> method
|
||
supports several different contexts, like general <code class="docutils literal notranslate"><span class="pre">html</span></code>, when it’s in an HTML <code class="docutils literal notranslate"><span class="pre">attr</span></code>, in <code class="docutils literal notranslate"><span class="pre">css</span></code>, etc. If nothing
|
||
else is specified, the data will be assumed to be in an HTML context. You can specify the context used by using the <code class="docutils literal notranslate"><span class="pre">esc()</span></code>
|
||
filter:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">user_styles</span> <span class="o">|</span> <span class="nx">esc</span><span class="p">(</span><span class="nx">css</span><span class="p">)</span> <span class="p">}</span>
|
||
<span class="o"><</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"{ user_link | esc(attr) }"</span><span class="o">></span><span class="p">{</span> <span class="nx">title</span> <span class="p">}</span><span class="o"></</span><span class="nx">a</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>There will be times when you absolutely need something to used and NOT escaped. You can do this by adding exclamation
|
||
marks to the opening and closing braces:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">!</span> <span class="nx">unescaped_var</span> <span class="o">!</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="filters">
|
||
<h3><a class="toc-backref" href="#id13">Filters</a><a class="headerlink" href="#filters" title="Permalink to this headline"></a></h3>
|
||
<p>Any single variable substitution can have one or more filters applied to it to modify the way it is presented. These
|
||
are not intended to drastically change the output, but provide ways to reuse the same variable data but with different
|
||
presentations. The <code class="docutils literal notranslate"><span class="pre">esc</span></code> filter discussed above is one example. Dates are another common use case, where you might
|
||
need to format the same data differently in several sections on the same page.</p>
|
||
<p>Filters are commands that come after the pseudo-variable name, and are separated by the pipe symbol, <code class="docutils literal notranslate"><span class="pre">|</span></code>:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="c1">// -55 is displayed as 55</span>
|
||
<span class="p">{</span> <span class="nx">value</span><span class="o">|</span><span class="nb">abs</span> <span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If the parameter takes any arguments, they must be separated by commas and enclosed in parentheses:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">created_at</span><span class="o">|</span><span class="nb">date</span><span class="p">(</span><span class="nx">Y</span><span class="o">-</span><span class="nx">m</span><span class="o">-</span><span class="nx">d</span><span class="p">)</span> <span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Multiple filters can be applied to the value by piping multiple ones together. They are processed in order, from
|
||
left to right:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="nx">created_at</span><span class="o">|</span><span class="nb">date_modify</span><span class="p">(</span><span class="o">+</span><span class="mi">5</span> <span class="nx">days</span><span class="p">)</span><span class="o">|</span><span class="nb">date</span><span class="p">(</span><span class="nx">Y</span><span class="o">-</span><span class="nx">m</span><span class="o">-</span><span class="nx">d</span><span class="p">)</span> <span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<section id="provided-filters">
|
||
<h4>Provided Filters<a class="headerlink" href="#provided-filters" title="Permalink to this headline"></a></h4>
|
||
<p>The following filters are available when using the parser:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 12%" />
|
||
<col style="width: 13%" />
|
||
<col style="width: 45%" />
|
||
<col style="width: 29%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>Filter</p></th>
|
||
<th class="head"><p>Arguments</p></th>
|
||
<th class="head"><p>Description</p></th>
|
||
<th class="head"><p>Example</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>abs</p></td>
|
||
<td></td>
|
||
<td><p>Displays the absolute value of a number.</p></td>
|
||
<td><p>{ v|abs }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>capitalize</p></td>
|
||
<td></td>
|
||
<td><p>Displays the string in sentence case: all lowercase
|
||
with firstletter capitalized.</p></td>
|
||
<td><p>{ v|capitalize}</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>date</p></td>
|
||
<td><p>format (Y-m-d)</p></td>
|
||
<td><p>A PHP <strong>date</strong>-compatible formatting string.</p></td>
|
||
<td><p>{ v|date(Y-m-d) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>date_modify</p></td>
|
||
<td><p>value to add
|
||
/ subtract</p></td>
|
||
<td><p>A <strong>strtotime</strong> compatible string to modify the date,
|
||
like <code class="docutils literal notranslate"><span class="pre">+5</span> <span class="pre">day</span></code> or <code class="docutils literal notranslate"><span class="pre">-1</span> <span class="pre">week</span></code>.</p></td>
|
||
<td><p>{ v|date_modify(+1 day) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>default</p></td>
|
||
<td><p>default value</p></td>
|
||
<td><p>Displays the default value if the variable is empty or
|
||
undefined.</p></td>
|
||
<td><p>{ v|default(just in case) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>esc</p></td>
|
||
<td><p>html, attr,
|
||
css, js</p></td>
|
||
<td><p>Specifies the context to escape the data.</p></td>
|
||
<td><p>{ v|esc(attr) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>excerpt</p></td>
|
||
<td><p>phrase, radius</p></td>
|
||
<td><p>Returns the text within a radius of words from a given
|
||
phrase. Same as <strong>excerpt</strong> helper function.</p></td>
|
||
<td><p>{ v|excerpt(green giant, 20) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>highlight</p></td>
|
||
<td><p>phrase</p></td>
|
||
<td><p>Highlights a given phrase within the text using
|
||
‘<mark></mark>’ tags.</p></td>
|
||
<td><p>{ v|highlight(view parser) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>highlight_code</p></td>
|
||
<td></td>
|
||
<td><p>Highlights code samples with HTML/CSS.</p></td>
|
||
<td><p>{ v|highlight_code }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>limit_chars</p></td>
|
||
<td><p>limit</p></td>
|
||
<td><p>Limits the number of characters to $limit.</p></td>
|
||
<td><p>{ v|limit_chars(100) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>limit_words</p></td>
|
||
<td><p>limit</p></td>
|
||
<td><p>Limits the number of words to $limit.</p></td>
|
||
<td><p>{ v|limit_words(20) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>local_currency</p></td>
|
||
<td><p>currency,
|
||
locale,
|
||
fraction</p></td>
|
||
<td><p>Displays a localized version of a currency. “currency”
|
||
valueis any 3-letter ISO 4217 currency code.</p></td>
|
||
<td><p>{ v|local_currency(EUR,en_US) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>local_number</p></td>
|
||
<td><p>type, precision,
|
||
locale</p></td>
|
||
<td><p>Displays a localized version of a number. “type” can be
|
||
one of: decimal, currency, percent, scientific, spellout,
|
||
ordinal, duration.</p></td>
|
||
<td><p>{ v|local_number(decimal,2,en_US) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>lower</p></td>
|
||
<td></td>
|
||
<td><p>Converts a string to lowercase.</p></td>
|
||
<td><p>{ v|lower }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>nl2br</p></td>
|
||
<td></td>
|
||
<td><p>Replaces all newline characters (n) to an HTML <br/> tag.</p></td>
|
||
<td><p>{ v|nl2br }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>number_format</p></td>
|
||
<td><p>places</p></td>
|
||
<td><p>Wraps PHP <strong>number_format</strong> function for use within the
|
||
parser.</p></td>
|
||
<td><p>{ v|number_format(3) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>prose</p></td>
|
||
<td></td>
|
||
<td><p>Takes a body of text and uses the <strong>auto_typography()</strong>
|
||
method to turn it into prettier, easier-to-read, prose.</p></td>
|
||
<td><p>{ v|prose }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>round</p></td>
|
||
<td><p>places, type</p></td>
|
||
<td><p>Rounds a number to the specified places. Types of <strong>ceil</strong>
|
||
and <strong>floor</strong> can be passed to use those functions instead.</p></td>
|
||
<td><p>{ v|round(3) } { v|round(ceil) }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>strip_tags</p></td>
|
||
<td><p>allowed chars</p></td>
|
||
<td><p>Wraps PHP <strong>strip_tags</strong>. Can accept a string of allowed
|
||
tags.</p></td>
|
||
<td><p>{ v|strip_tags(<br>) }</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>title</p></td>
|
||
<td></td>
|
||
<td><p>Displays a “title case” version of the string, with all
|
||
lowercase, and each word capitalized.</p></td>
|
||
<td><p>{ v|title }</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>upper</p></td>
|
||
<td></td>
|
||
<td><p>Displays the string in all uppercase.</p></td>
|
||
<td><p>{ v|upper }</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>See <a class="reference external" href="https://www.php.net/manual/en/numberformatter.create.php">PHP’s NumberFormatter</a> for details relevant to the
|
||
“local_number” filter.</p>
|
||
</section>
|
||
<section id="custom-filters">
|
||
<h4>Custom Filters<a class="headerlink" href="#custom-filters" title="Permalink to this headline"></a></h4>
|
||
<p>You can easily create your own filters by editing <strong>app/Config/View.php</strong> and adding new entries to the
|
||
<code class="docutils literal notranslate"><span class="pre">$filters</span></code> array. Each key is the name which the filter is called by in the view, and its value is any valid PHP
|
||
callable:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
|
||
|
||
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
|
||
|
||
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
|
||
<span class="p">{</span>
|
||
<span class="k">public</span> <span class="nv">$filters</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'foo'</span> <span class="o">=></span> <span class="s1">'\Some\Class::methodName'</span><span class="p">,</span>
|
||
<span class="s1">'str_repeat'</span> <span class="o">=></span> <span class="s1">'str_repeat'</span><span class="p">,</span> <span class="c1">// native php function</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="c1">// ...</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="parser-plugins">
|
||
<h3><a class="toc-backref" href="#id14">Parser Plugins</a><a class="headerlink" href="#parser-plugins" title="Permalink to this headline"></a></h3>
|
||
<p>Plugins allow you to extend the parser, adding custom features for each project. They can be any PHP callable, making
|
||
them very simple to implement. Within templates, plugins are specified by <code class="docutils literal notranslate"><span class="pre">{+</span> <span class="pre">+}</span></code> tags:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="o">+</span><span class="p">}</span> <span class="nx">inner</span> <span class="nx">content</span> <span class="p">{</span><span class="o">+</span> <span class="o">/</span><span class="nx">foo</span> <span class="o">+</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This example shows a plugin named <strong>foo</strong>. It can manipulate any of the content between its opening and closing tags.
|
||
In this example, it could work with the text ” inner content “. Plugins are processed before any pseudo-variable
|
||
replacements happen.</p>
|
||
<p>While plugins will often consist of tag pairs, like shown above, they can also be a single tag, with no closing tag:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="o">+</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Opening tags can also contain parameters that can customize how the plugin works. The parameters are represented as
|
||
key/value pairs:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="nx">foo</span> <span class="nx">bar</span><span class="o">=</span><span class="mi">2</span> <span class="nx">baz</span><span class="o">=</span><span class="s2">"x y"</span> <span class="o">+</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Parameters can also be single values:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">+</span> <span class="k">include</span> <span class="nx">somefile</span><span class="o">.</span><span class="nx">php</span> <span class="o">+</span><span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<section id="provided-plugins">
|
||
<h4>Provided Plugins<a class="headerlink" href="#provided-plugins" title="Permalink to this headline"></a></h4>
|
||
<p>The following plugins are available when using the parser:</p>
|
||
<table class="docutils align-default">
|
||
<colgroup>
|
||
<col style="width: 12%" />
|
||
<col style="width: 17%" />
|
||
<col style="width: 29%" />
|
||
<col style="width: 42%" />
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="row-odd"><th class="head"><p>Plugin</p></th>
|
||
<th class="head"><p>Arguments</p></th>
|
||
<th class="head"><p>Description</p></th>
|
||
<th class="head"><p>Example</p></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="row-even"><td><p>current_url</p></td>
|
||
<td></td>
|
||
<td><p>Alias for the current_url helper function.</p></td>
|
||
<td><p>{+ current_url +}</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>previous_url</p></td>
|
||
<td></td>
|
||
<td><p>Alias for the previous_url helper function.</p></td>
|
||
<td><p>{+ previous_url +}</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>siteURL</p></td>
|
||
<td></td>
|
||
<td><p>Alias for the site_url helper function.</p></td>
|
||
<td><p>{+ siteURL “login” +}</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>mailto</p></td>
|
||
<td><p>email, title, attributes</p></td>
|
||
<td><p>Alias for the mailto helper function.</p></td>
|
||
<td><p>{+ mailto <a class="reference external" href="mailto:email=foo%40example.com">email=foo<span>@</span>example<span>.</span>com</a> title=”Stranger Things” +}</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>safe_mailto</p></td>
|
||
<td><p>email, title, attributes</p></td>
|
||
<td><p>Alias for the safe_mailto helper function.</p></td>
|
||
<td><p>{+ safe_mailto <a class="reference external" href="mailto:email=foo%40example.com">email=foo<span>@</span>example<span>.</span>com</a> title=”Stranger Things” +}</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>lang</p></td>
|
||
<td><p>language string</p></td>
|
||
<td><p>Alias for the lang helper function.</p></td>
|
||
<td><p>{+ lang number.terabyteAbbr +}</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>validation_errors</p></td>
|
||
<td><p>fieldname(optional)</p></td>
|
||
<td><p>Returns either error string for the field
|
||
(if specified) or all validation errors.</p></td>
|
||
<td><p>{+ validation_errors +} , {+ validation_errors field=”email” +}</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>route</p></td>
|
||
<td><p>route name</p></td>
|
||
<td><p>Alias for the route_to helper function.</p></td>
|
||
<td><p>{+ route “login” +}</p></td>
|
||
</tr>
|
||
<tr class="row-even"><td><p>csp_script_nonce</p></td>
|
||
<td></td>
|
||
<td><p>Alias for the csp_script_nonce helper
|
||
function.</p></td>
|
||
<td><p>{+ csp_script_nonce +}</p></td>
|
||
</tr>
|
||
<tr class="row-odd"><td><p>csp_style_nonce</p></td>
|
||
<td></td>
|
||
<td><p>Alias for the csp_style_nonce helper
|
||
function.</p></td>
|
||
<td><p>{+ csp_style_nonce +}</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
<section id="registering-a-plugin">
|
||
<h4>Registering a Plugin<a class="headerlink" href="#registering-a-plugin" title="Permalink to this headline"></a></h4>
|
||
<p>At its simplest, all you need to do to register a new plugin and make it ready for use is to add it to the
|
||
<strong>app/Config/View.php</strong>, under the <code class="docutils literal notranslate"><span class="pre">$plugins</span></code> array. The key is the name of the plugin that is
|
||
used within the template file. The value is any valid PHP callable, including static class methods:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
|
||
|
||
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
|
||
|
||
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
|
||
<span class="p">{</span>
|
||
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'foo'</span> <span class="o">=></span> <span class="s1">'\Some\Class::methodName'</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="c1">// ...</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>You can also use closures, but these can only be defined in the config file’s constructor:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
|
||
|
||
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
|
||
|
||
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
|
||
<span class="p">{</span>
|
||
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[];</span>
|
||
|
||
<span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">()</span>
|
||
<span class="p">{</span>
|
||
<span class="nv">$this</span><span class="o">-></span><span class="na">plugins</span><span class="p">[</span><span class="s1">'bar'</span><span class="p">]</span> <span class="o">=</span> <span class="k">static</span> <span class="nx">fn</span> <span class="p">(</span><span class="k">array</span> <span class="nv">$params</span> <span class="o">=</span> <span class="p">[])</span> <span class="o">=></span> <span class="nv">$params</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">??</span> <span class="s1">''</span><span class="p">;</span>
|
||
|
||
<span class="k">parent</span><span class="o">::</span><span class="na">__construct</span><span class="p">();</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// ...</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If the callable is on its own, it is treated as a single tag, not a open/close one. It will be replaced by
|
||
the return value from the plugin:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
|
||
|
||
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
|
||
|
||
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
|
||
<span class="p">{</span>
|
||
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'foo'</span> <span class="o">=></span> <span class="s1">'\Some\Class::methodName'</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="c1">// ...</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="cm">/*</span>
|
||
<span class="cm"> * Tag is replaced by the return value of Some\Class::methodName() static function.</span>
|
||
<span class="cm"> * {+ foo +}</span>
|
||
<span class="cm"> */</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If the callable is wrapped in an array, it is treated as an open/close tag pair that can operate on any of
|
||
the content between its tags:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">namespace</span> <span class="nx">Config</span><span class="p">;</span>
|
||
|
||
<span class="k">use</span> <span class="nx">CodeIgniter\Config\View</span> <span class="k">as</span> <span class="nx">BaseView</span><span class="p">;</span>
|
||
|
||
<span class="k">class</span> <span class="nc">View</span> <span class="k">extends</span> <span class="nx">BaseView</span>
|
||
<span class="p">{</span>
|
||
<span class="k">public</span> <span class="nv">$plugins</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'foo'</span> <span class="o">=></span> <span class="p">[</span><span class="s1">'\Some\Class::methodName'</span><span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="c1">// ...</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="c1">// {+ foo +} inner content {+ /foo +}</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
<section id="usage-notes">
|
||
<h2><a class="toc-backref" href="#id15">Usage Notes</a><a class="headerlink" href="#usage-notes" title="Permalink to this headline"></a></h2>
|
||
<p>If you include substitution parameters that are not referenced in your
|
||
template, they are ignored:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'Hello, {firstname} {lastname}'</span><span class="p">;</span>
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Mr'</span><span class="p">,</span>
|
||
<span class="s1">'firstname'</span> <span class="o">=></span> <span class="s1">'John'</span><span class="p">,</span>
|
||
<span class="s1">'lastname'</span> <span class="o">=></span> <span class="s1">'Doe'</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
<span class="c1">// Result: Hello, John Doe</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If you do not include a substitution parameter that is referenced in your
|
||
template, the original pseudo-variable is shown in the result:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'Hello, {firstname} {initials} {lastname}'</span><span class="p">;</span>
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Mr'</span><span class="p">,</span>
|
||
<span class="s1">'firstname'</span> <span class="o">=></span> <span class="s1">'John'</span><span class="p">,</span>
|
||
<span class="s1">'lastname'</span> <span class="o">=></span> <span class="s1">'Doe'</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
<span class="c1">// Result: Hello, John {initials} Doe</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>If you provide a string substitution parameter when an array is expected,
|
||
i.e., for a variable pair, the substitution is done for the opening variable
|
||
pair tag, but the closing variable pair tag is not rendered properly:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$template</span> <span class="o">=</span> <span class="s1">'Hello, {firstname} {lastname} ({degrees}{degree} {/degrees})'</span><span class="p">;</span>
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'degrees'</span> <span class="o">=></span> <span class="s1">'Mr'</span><span class="p">,</span>
|
||
<span class="s1">'firstname'</span> <span class="o">=></span> <span class="s1">'John'</span><span class="p">,</span>
|
||
<span class="s1">'lastname'</span> <span class="o">=></span> <span class="s1">'Doe'</span><span class="p">,</span>
|
||
<span class="s1">'titles'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'degree'</span> <span class="o">=></span> <span class="s1">'BSc'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'degree'</span> <span class="o">=></span> <span class="s1">'PhD'</span><span class="p">],</span>
|
||
<span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
<span class="c1">// Result: Hello, John Doe (Mr{degree} {/degrees})</span>
|
||
</pre></div>
|
||
</div>
|
||
<section id="view-fragments">
|
||
<h3><a class="toc-backref" href="#id16">View Fragments</a><a class="headerlink" href="#view-fragments" title="Permalink to this headline"></a></h3>
|
||
<p>You do not have to use variable pairs to get the effect of iteration in
|
||
your views. It is possible to use a view fragment for what would be inside
|
||
a variable pair, and to control the iteration in your controller instead
|
||
of in the view.</p>
|
||
<p>An example with the iteration controlled in the view:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="nv">$template</span> <span class="o">=</span> <span class="s1">'<ul>{menuitems}</span>
|
||
<span class="s1"> <li><a href="{link}">{title}</a></li></span>
|
||
<span class="s1">{/menuitems}</ul>'</span><span class="p">;</span>
|
||
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'menuitems'</span> <span class="o">=></span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'First Link'</span><span class="p">,</span> <span class="s1">'link'</span> <span class="o">=></span> <span class="s1">'/first'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Second Link'</span><span class="p">,</span> <span class="s1">'link'</span> <span class="o">=></span> <span class="s1">'/second'</span><span class="p">],</span>
|
||
<span class="p">]</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Result:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">ul</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">li</span><span class="o">><</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"/first"</span><span class="o">></span><span class="nx">First</span> <span class="nx">Link</span><span class="o"></</span><span class="nx">a</span><span class="o">></</span><span class="nx">li</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">li</span><span class="o">><</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"/second"</span><span class="o">></span><span class="nx">Second</span> <span class="nx">Link</span><span class="o"></</span><span class="nx">a</span><span class="o">></</span><span class="nx">li</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">ul</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>An example with the iteration controlled in the controller,
|
||
using a view fragment:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$temp</span> <span class="o">=</span> <span class="s1">''</span><span class="p">;</span>
|
||
<span class="nv">$template1</span> <span class="o">=</span> <span class="s1">'<li><a href="{link}">{title}</a></li>'</span><span class="p">;</span>
|
||
<span class="nv">$data1</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'First Link'</span><span class="p">,</span> <span class="s1">'link'</span> <span class="o">=></span> <span class="s1">'/first'</span><span class="p">],</span>
|
||
<span class="p">[</span><span class="s1">'title'</span> <span class="o">=></span> <span class="s1">'Second Link'</span><span class="p">,</span> <span class="s1">'link'</span> <span class="o">=></span> <span class="s1">'/second'</span><span class="p">],</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$data1</span> <span class="k">as</span> <span class="nv">$menuItem</span><span class="p">)</span> <span class="p">{</span>
|
||
<span class="nv">$temp</span> <span class="o">.=</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$menuItem</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template1</span><span class="p">);</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="nv">$template2</span> <span class="o">=</span> <span class="s1">'<ul>{menuitems}</ul>'</span><span class="p">;</span>
|
||
<span class="nv">$data</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s1">'menuitems'</span> <span class="o">=></span> <span class="nv">$temp</span><span class="p">,</span>
|
||
<span class="p">];</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">(</span><span class="nv">$data</span><span class="p">)</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="nv">$template2</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Result:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><</span><span class="nx">ul</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">li</span><span class="o">><</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"/first"</span><span class="o">></span><span class="nx">First</span> <span class="nx">Link</span><span class="o"></</span><span class="nx">a</span><span class="o">></</span><span class="nx">li</span><span class="o">></span>
|
||
<span class="o"><</span><span class="nx">li</span><span class="o">><</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="s2">"/second"</span><span class="o">></span><span class="nx">Second</span> <span class="nx">Link</span><span class="o"></</span><span class="nx">a</span><span class="o">></</span><span class="nx">li</span><span class="o">></span>
|
||
<span class="o"></</span><span class="nx">ul</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="namespace-CodeIgniter\View">
|
||
<span id="class-reference"></span><h2><a class="toc-backref" href="#id17">Class Reference</a><a class="headerlink" href="#namespace-CodeIgniter\View" title="Permalink to this headline"></a></h2>
|
||
<dl class="php class">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser">
|
||
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">CodeIgniter\View\</span></span><span class="sig-name descname"><span class="pre">Parser</span></span><a class="headerlink" href="#CodeIgniter\View\Parser" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::render">
|
||
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$view</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$options</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$saveData</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::render" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$view</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – File name of the view source</p></li>
|
||
<li><p><strong>$options</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) – Array of options, as key/value pairs</p></li>
|
||
<li><p><strong>$saveData</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">boolean</span></code></span>) – If true, will save data for use with any other calls, if false, will clean the data after rendering the view.</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The rendered text for the chosen view</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Builds the output based upon a file name and any data that has already been set:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'myview'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Options supported:</p>
|
||
<blockquote>
|
||
<div><ul class="simple">
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cache</span></code> - the time in seconds, to save a view’s results</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cache_name</span></code> - the ID used to save/retrieve a cached view result; defaults to the viewpath</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">cascadeData</span></code> - true if the data pairs in effect when a nested or loop substitution occurs should be propagated</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">saveData</span></code> - true if the view data parameter should be retained for subsequent calls</p></li>
|
||
</ul>
|
||
</div></blockquote>
|
||
<p>Any conditional substitutions are performed first, then remaining
|
||
substitutions are performed for each data pair.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::renderString">
|
||
<span class="sig-name descname"><span class="pre">renderString</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$template</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$options</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$saveData</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::renderString" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$template</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – View source provided as a string</p></li>
|
||
<li><p><strong>$options</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) – Array of options, as key/value pairs</p></li>
|
||
<li><p><strong>$saveData</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">boolean</span></code></span>) – If true, will save data for use with any other calls, if false, will clean the data after rendering the view.</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The rendered text for the chosen view</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Builds the output based upon a provided template source and any data that has already been set:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="k">return</span> <span class="nv">$parser</span><span class="o">-></span><span class="na">renderString</span><span class="p">(</span><span class="s1">'<ul><li>Item 1</li><li>Item 2</li></ul>'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Options supported, and behavior, as above.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setData">
|
||
<span class="sig-name descname"><span class="pre">setData</span></span><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param"><span class="pre">$data</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$context</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setData" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$data</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">array</span></code></span>) – Array of view data strings, as key/value pairs</p></li>
|
||
<li><p><strong>$context</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – The context to use for data escaping.</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The Renderer, for method chaining</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Sets several pieces of view data at once:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span><span class="o">-></span><span class="na">setData</span><span class="p">([</span><span class="s1">'name'</span> <span class="o">=></span> <span class="s1">'George'</span><span class="p">,</span> <span class="s1">'position'</span> <span class="o">=></span> <span class="s1">'Boss'</span><span class="p">]);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Supported escape contexts: html, css, js, url, or attr or raw.
|
||
If ‘raw’, no escaping will happen.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setVar">
|
||
<span class="sig-name descname"><span class="pre">setVar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$name</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$value</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">[</span>, <em class="sig-param"><span class="pre">$context</span> <span class="pre">=</span> <span class="pre">null</span></em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setVar" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$name</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – Name of the view data variable</p></li>
|
||
<li><p><strong>$value</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">mixed</span></code></span>) – The value of this view data</p></li>
|
||
<li><p><strong>$context</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – The context to use for data escaping.</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The Renderer, for method chaining</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Sets a single piece of view data:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span><span class="o">-></span><span class="na">setVar</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span> <span class="s1">'Joe'</span><span class="p">,</span> <span class="s1">'html'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Supported escape contexts: html, css, js, url, attr or raw.
|
||
If ‘raw’, no escaping will happen.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setDelimiters">
|
||
<span class="sig-name descname"><span class="pre">setDelimiters</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$leftDelimiter</span> <span class="pre">=</span> <span class="pre">'{'</span></em>, <em class="sig-param"><span class="pre">$rightDelimiter</span> <span class="pre">=</span> <span class="pre">'}'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setDelimiters" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$leftDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – Left delimiter for substitution fields</p></li>
|
||
<li><p><strong>$rightDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – right delimiter for substitution fields</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The Renderer, for method chaining</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Override the substitution field delimiters:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span><span class="o">-></span><span class="na">setDelimiters</span><span class="p">(</span><span class="s1">'['</span><span class="p">,</span> <span class="s1">']'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="php method">
|
||
<dt class="sig sig-object php" id="CodeIgniter\View\Parser::setConditionalDelimiters">
|
||
<span class="sig-name descname"><span class="pre">setConditionalDelimiters</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">$leftDelimiter</span> <span class="pre">=</span> <span class="pre">'{'</span></em>, <em class="sig-param"><span class="pre">$rightDelimiter</span> <span class="pre">=</span> <span class="pre">'}'</span></em><span class="sig-paren">)</span><a class="headerlink" href="#CodeIgniter\View\Parser::setConditionalDelimiters" title="Permalink to this definition"></a></dt>
|
||
<dd><dl class="field-list simple">
|
||
<dt class="field-odd">Parameters</dt>
|
||
<dd class="field-odd"><ul class="simple">
|
||
<li><p><strong>$leftDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – Left delimiter for conditionals</p></li>
|
||
<li><p><strong>$rightDelimiter</strong> (<span><code class="xref php php-obj docutils literal notranslate"><span class="pre">string</span></code></span>) – right delimiter for conditionals</p></li>
|
||
</ul>
|
||
</dd>
|
||
<dt class="field-even">Returns</dt>
|
||
<dd class="field-even"><p>The Renderer, for method chaining</p>
|
||
</dd>
|
||
<dt class="field-odd">Return type</dt>
|
||
<dd class="field-odd"><p><span><code class="xref php php-obj docutils literal notranslate"><span class="pre">CodeIgniter\View\RendererInterface.</span></code></span></p>
|
||
</dd>
|
||
</dl>
|
||
<p>Override the conditional delimiters:</p>
|
||
<div class="highlight-html+php notranslate"><div class="highlight"><pre><span></span><span class="o"><?</span><span class="nx">php</span>
|
||
|
||
<span class="nv">$parser</span><span class="o">-></span><span class="na">setConditionalDelimiters</span><span class="p">(</span><span class="s1">'{%'</span><span class="p">,</span> <span class="s1">'%}'</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||
<a href="view_layouts.html" class="btn btn-neutral float-left" title="View Layouts" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||
<a href="view_decorators.html" class="btn btn-neutral float-right" title="View Decorators" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© Copyright 2019-2023 CodeIgniter Foundation.
|
||
<span class="lastupdated">Last updated on Nov 27, 2023.
|
||
</span></p>
|
||
</div>
|
||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(false);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |