Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 30 additions & 8 deletions user_guide_src/source/outgoing/view_renderer.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,27 +6,32 @@ View Renderer
:local:
:depth: 2

***********************
Using the View Renderer
***********************

The ``view()`` function is a convenience function that grabs an instance of the
The :php:func:`view()` function is a convenience function that grabs an instance of the
``renderer`` service, sets the data, and renders the view. While this is often
exactly what you want, you may find times where you want to work with it more directly.
In that case you can access the View service directly:

.. literalinclude:: view_renderer/001.php
:lines: 2-

Alternately, if you are not using the ``View`` class as your default renderer, you
can instantiate it directly:

.. literalinclude:: view_renderer/002.php
:lines: 2-

.. important:: You should create services only within controllers. If you need
access to the View class from a library, you should set that as a dependency
in your library's constructor.

Then you can use any of the three standard methods that it provides:
**render(viewpath, options, save)**, **setVar(name, value, context)** and **setData(data, context)**.
:php:meth:`render() <CodeIgniter\\View\\View::render()>`,
:php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` and
:php:meth:`setData() <CodeIgniter\\View\\View::setData()>`.

What It Does
============
Expand All@@ -45,13 +50,28 @@ script. You will have to give each escaped value a unique parameter name.
No special meaning is attached to parameters whose value is an array. It is up
to you to process the array appropriately in your PHP code.

Setting View Parameters
=======================

The :php:meth:`setVar() <CodeIgniter\\View\\View::setVar()>` method sets a view parameter.

.. literalinclude:: view_renderer/008.php
:lines: 2-

The :php:meth:`setData() <CodeIgniter\\View\\View::setData()>` method sets multiple view
parameters at once.

.. literalinclude:: view_renderer/007.php
:lines: 2-

Method Chaining
===============

The ``setVar()`` and ``setData()`` methods are chainable, allowing you to combine a
number of different calls together in a chain:

.. literalinclude:: view_renderer/003.php
:lines: 2-

Escaping Data
=============
Expand All@@ -63,9 +83,10 @@ escape the data for. See below for context descriptions.
If you don't want the data to be escaped, you can pass ``null`` or ``'raw'`` as the final parameter to each function:

.. literalinclude:: view_renderer/004.php
:lines: 2-

If you choose not to escape data, or you are passing in an object instance, you can manually escape the data within
the view with the ``esc()`` function. The first parameter is the string to escape. The second parameter is the
the view with the :php:func:`esc()` function. The first parameter is the string to escape. The second parameter is the
context to escape the data for (see below)::

<?= esc($object->getStat()) ?>
Expand DownExpand Up@@ -99,9 +120,10 @@ Several options can be passed to the ``render()`` or ``renderString()`` methods:
- ``cache_name`` - the ID used to save/retrieve a cached view result; defaults to the viewpath; ignored for ``renderString()``
- ``saveData`` - true if the view data parameters should be retained for subsequent calls

.. note:: ``saveData`` as defined by the interface must be a boolean, but implementing
.. note:: ``saveData()`` as defined by the interface must be a boolean, but implementing
classes (like ``View`` below) may extend this to include ``null`` values.

***************
Class Reference
***************

Expand All@@ -110,7 +132,6 @@ Class Reference
.. php:class:: View

.. php:method:: render($view[, $options[, $saveData = false]])
:noindex:

:param string $view: File name of the view source
:param array $options: Array of options, as key/value pairs
Expand All@@ -121,9 +142,9 @@ Class Reference
Builds the output based upon a file name and any data that has already been set:

.. literalinclude:: view_renderer/005.php
:lines: 2-

.. php:method:: renderString($view[, $options[, $saveData = false]])
:noindex:

:param string $view: Contents of the view to render, for instance content retrieved from a database
:param array $options: Array of options, as key/value pairs
Expand All@@ -134,14 +155,14 @@ Class Reference
Builds the output based upon a view fragment and any data that has already been set:

.. literalinclude:: view_renderer/006.php
:lines: 2-

.. warning:: This could be used for displaying content that might have been stored in a database,
but you need to be aware that this is a potential security vulnerability,
and that you **must** validate any such data, and probably escape it
appropriately!

.. php:method:: setData([$data[, $context = null]])
:noindex:

:param array $data: Array of view data strings, as key/value pairs
:param string $context: The context to use for data escaping.
Expand All@@ -151,6 +172,7 @@ Class Reference
Sets several pieces of view data at once:

.. literalinclude:: view_renderer/007.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, or ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand All@@ -159,7 +181,6 @@ Class Reference
until the view is rendered.

.. php:method:: setVar($name[, $value = null[, $context = null]])
:noindex:

:param string $name: Name of the view data variable
:param mixed $value: The value of this view data
Expand All@@ -170,6 +191,7 @@ Class Reference
Sets a single piece of view data:

.. literalinclude:: view_renderer/008.php
:lines: 2-

Supported escape contexts: ``html``, ``css``, ``js``, ``url``, ``attr`` or ``raw``.
If ``'raw'``, no escaping will happen.
Expand Down