developer guides, templates review

This commit is contained in:
Uncle Cheese 2014-10-30 17:16:38 +13:00 committed by Cam Findlay
parent ae4d61eefb
commit b7daa8d1ee
3 changed files with 24 additions and 16 deletions

View File

@ -42,7 +42,7 @@ An example of a SilverStripe template is below:
<div class="note"> <div class="note">
Templates can be used for more than HTML output. You can use them to output your data as JSON, XML, CSV or any other Templates can be used for more than HTML output. You can use them to output your data as JSON, XML, CSV or any other
text based format. text-based format.
</div> </div>
## Variables ## Variables
@ -92,6 +92,10 @@ Variables can come from your database fields, or custom methods you define on yo
:::html :::html
<p>You are coming from $UsersIpAddress.</p> <p>You are coming from $UsersIpAddress.</p>
<div class="node" markdown="1">
Method names that begin with `get` will automatically be resolved when their prefix is excluded. For example, the above method call `$UsersIpAddress` would also invoke a method named `getUsersIpAddress()`.
</div>
The variable's that can be used in a template vary based on the object currently in [scope](#scope). Scope defines what The variable's that can be used in a template vary based on the object currently in [scope](#scope). Scope defines what
object the methods get called on. For the standard `Page.ss` template the scope is the current [api:Page_Controller] object the methods get called on. For the standard `Page.ss` template the scope is the current [api:Page_Controller]
class. This object gives you access to all the database fields on [api:Page_Controller], its corresponding [api:Page] class. This object gives you access to all the database fields on [api:Page_Controller], its corresponding [api:Page]
@ -116,7 +120,7 @@ The simplest conditional block is to check for the presence of a value (does not
<p>You are logged in as $CurrentMember.FirstName $CurrentMember.Surname.</p> <p>You are logged in as $CurrentMember.FirstName $CurrentMember.Surname.</p>
<% end_if %> <% end_if %>
A conditional can also check for a value other than falsey. A conditional can also check for a value other than falsy.
:::ss :::ss
<% if $MyDinner == "kipper" %> <% if $MyDinner == "kipper" %>
@ -445,18 +449,20 @@ The `<% with %>` tag lets you change into a new scope. Consider the following ex
:::ss :::ss
<% with $CurrentMember %> <% with $CurrentMember %>
Hello $FirstName, welcome back. Your current balance is $Balance. Hello, $FirstName, welcome back. Your current balance is $Balance.
<% end_with %> <% end_with %>
This is functionalty the same as the following:
:::ss
Hello, $CurrentMember.FirstName, welcome back. Yout current balance is $CurrentMember.Balance
Notice that the first example is much tidier, as it removes the repeated use of the `$CurrentMember` accessor.
Outside the `<% with %>.`, we are in the page scope. Inside it, we are in the scope of `$CurrentMember` object. We can Outside the `<% with %>.`, we are in the page scope. Inside it, we are in the scope of `$CurrentMember` object. We can
refer directly to properties and methods of the [api:Member] object. `$FirstName` inside the scope is equivalent to refer directly to properties and methods of the [api:Member] object. `$FirstName` inside the scope is equivalent to
`$CurrentMember.FirstName`. `$CurrentMember.FirstName`.
<div class="info" markdown="1">
Why would you use `with`? This keeps the markup clean, and if the scope is a complicated expression we don't
have to repeat it on each reference of a property.
</div>
## Comments ## Comments

View File

@ -1,5 +1,5 @@
title: Common Variables title: Common Variables
summary: Some of the common variables and methods your templates can use. summary: Some of the common variables and methods your templates can use, including Menu, SiteConfig, and more.
# Common Variables # Common Variables
@ -155,7 +155,7 @@ link.
:::ss :::ss
$LinkingMode $LinkingMode
When looping over a list of `SiteTree` instances through a `<% loop Menu %>` or `<% loop Children %>`, `$LinkingMode` When looping over a list of `SiteTree` instances through a `<% loop $Menu %>` or `<% loop $Children %>`, `$LinkingMode`
will return context about the page relative to the currently viewed page. It can have the following values: will return context about the page relative to the currently viewed page. It can have the following values:
* `link`: You are neither on this page nor in this section. * `link`: You are neither on this page nor in this section.
@ -177,10 +177,10 @@ For instance, to only show the menu item linked if it's the current one:
* `$LinkOrSection`: Determines if the item is in the current section, so in the path towards the current page. Useful * `$LinkOrSection`: Determines if the item is in the current section, so in the path towards the current page. Useful
for menus which you only want to show a second level menu when you are on that page or a child of it. Returns "link" for menus which you only want to show a second level menu when you are on that page or a child of it. Returns "link"
or "section" strings. or "section" strings.
* `InSection(page-url)`: This if block will pass if we're currently on the page-url page or one of its children. * `$InSection(page-url)`: This if block will pass if we're currently on the page-url page or one of its children.
:::ss :::ss
<% if InSection(about-us) %> <% if $InSection(about-us) %>
<p>You are viewing the about us section</p> <p>You are viewing the about us section</p>
<% end_if %> <% end_if %>
@ -239,7 +239,7 @@ pages underneath a "staff" holder on any page, regardless if its on the top leve
### AllChildren ### AllChildren
Content authors have the ability to hide pages from menus by un-selecting the `ShowInMenus` checkbox within the CMS. Content authors have the ability to hide pages from menus by un-selecting the `ShowInMenus` checkbox within the CMS.
This option will be honored by `<% loop Children %>` and `<% loop Menu %>` however if you want to ignore the user This option will be honored by `<% loop $Children %>` and `<% loop $Menu %>` however if you want to ignore the user
preference, `AllChildren` does not filter by `ShowInMenus`. preference, `AllChildren` does not filter by `ShowInMenus`.
:::ss :::ss
@ -364,7 +364,7 @@ page. The previous example could be rewritten to use the following syntax.
Breadcrumbs are the path of pages which need to be taken to reach the current page, and can be a great navigation aid Breadcrumbs are the path of pages which need to be taken to reach the current page, and can be a great navigation aid
for website users. for website users.
While you can achieve breadcrumbs through the `<% Level(<level>) %>` control manually, there's a nicer shortcut: The While you can achieve breadcrumbs through the `$Level(<level>)` control manually, there's a nicer shortcut: The
`$Breadcrumbs` variable. `$Breadcrumbs` variable.
:::ss :::ss
@ -380,7 +380,7 @@ By default, it uses the template defined in `cms/templates/BreadcrumbsTemplate.s
<% end_if %> <% end_if %>
<div class="info" markdown="1"> <div class="info" markdown="1">
To customize the markup that the `$Breadcrumbs` generates. Copy `cms/templates/BreadcrumbsTemplate.ss` to To customize the markup that the `$Breadcrumbs` generates, copy `cms/templates/BreadcrumbsTemplate.ss` to
`mysite/templates/BreadcrumbsTemplate.ss`, modify the newly copied template and flush your SilverStripe cache. `mysite/templates/BreadcrumbsTemplate.ss`, modify the newly copied template and flush your SilverStripe cache.
</div> </div>

View File

@ -64,6 +64,8 @@ JavaScript in a separate file and instead load, via search and replace, several
Requirements::javascriptTemplate("cms/javascript/editor.template.js", $vars); Requirements::javascriptTemplate("cms/javascript/editor.template.js", $vars);
In this example, `editor.template.js` is expected to contain a replaceable variable expressed as `$EditorCSS`.
### Custom Inline CSS or Javascript ### Custom Inline CSS or Javascript
You can also quote custom script directly. This may seem a bit ugly, but is useful when you need to transfer some kind You can also quote custom script directly. This may seem a bit ugly, but is useful when you need to transfer some kind
@ -103,7 +105,7 @@ To make debugging easier in your local environment, combined files is disabled w
mode. mode.
</div> </div>
By default it stores the generated file in the assets/ folder but you can configure this by pointing the By default it stores the generated file in the assets/ folder, but you can configure this by pointing the
`Requirements.combined_files_folder` configuration setting to a specific folder. `Requirements.combined_files_folder` configuration setting to a specific folder.
**mysite/_config/app.yml** **mysite/_config/app.yml**
@ -136,7 +138,7 @@ the third paramter of the `combine_files` function:
Clears all defined requirements. You can also clear specific requirements. Clears all defined requirements. You can also clear specific requirements.
:::php :::php
Requirements::clear('jsparty/prototype.js'); Requirements::clear(THIRDPARTY_DIR.'/prototype.js');
<div class="alert" markdown="1"> <div class="alert" markdown="1">
Depending on where you call this command, a Requirement might be *re-included* afterwards. Depending on where you call this command, a Requirement might be *re-included* afterwards.