Jump to:

22977 Posts in 11806 Topics by 2826 members

General Questions

SilverStripe Forums » General Questions » Can't Get $Layout Working

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 520 Views
  • goodness
    Avatar
    Community Member
    38 Posts

    Can't Get $Layout Working Link to this post

    Hi All,

    I'm brand new to SS and working my way through the tutorial. I was finally able to get the system to recognize a new HomePage page type.
    However, I can't seem to get the $Layout piece to work. When I replaced everything in the <div id="ContentContainer"> with $Layout nothing renders in the pages.

    I am running version 3.0.5

    Here's my code:

    templates/Page.ss

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" >
       <head>
          <% base_tag %>
          <title><% if $MetaTitle %>$MetaTitle<% else %>$Title<% end_if %> &raquo; $SiteConfig.Title</title>
          <meta charset="utf-8">
          $MetaTags
          <% require themedCSS(layout) %>
          <% require themedCSS(typography) %>
          <% require themedCSS(form) %>
          <title></title>
          <link rel="stylesheet" type="text/css" href="tutorial/css/layout.css" />
          <link rel="stylesheet" type="text/css" href="tutorial/css/typography.css" />
          <link rel="stylesheet" type="text/css" href="tutorial/css/form.css" />
       </head>
       <body>
          <div id="Main">
          
             <div id="BrandingTop"></div>
             <div id="BrandingBtm">
                <div id="SecureLogin"></div>
             </div>
             
             <div id="TopNavHolder">
             <ul id="Menu1">
             <% control Menu(1) %>
          <li class="$LinkingMode">
          <a href="$Link" title="Go to the &quot;{$Title}&quot; page">$MenuTitle</a>
             </li>
             <% end_control %>
             </ul>
             </div>
             
             <div id="Header">
                <h1>$Title</h1>
             </div>
             
             <div id="ContentContainer">
          $Layout
          </div>
             
             <div id="Footer">
                <span>Visit <a href="http://www.silverstripe.com" title="Visit www.silverstripe.com">www.silverstripe.com</a>; to download the CMS</span>
             </div>
          </div>
          $SilverStripeNavigator
       </body>
    </html>

    templates/Layout/Page.ss

    <% if Menu(2) %>
    <ul id="Menu2">
    <% control Menu(2) %>
    <li class="$LinkingMode"><a href="$Link" title="Go to the &quot;{$Title}&quot; page">$MenuTitle</a></li>
    <% end_control %>
    </ul>
    <% end_if %>

    <div id="Content" class="typography">
    <% if Level(2) %>
    <div class="breadcrumbs">
    $Breadcrumbs
    </div>
    <% end_if %>
    $Content
    $Form
    </div>

    code/Page.php

    <?php
    class Page extends SiteTree {

       public static $db = array(
       );

       public static $has_one = array(
       );

    }
    class Page_Controller extends ContentController {

       /**
        * An array of actions that can be accessed via a request. Each array element should be an action name, and the
        * permissions or conditions required to allow the user to access it.
        *
        * <code>
        * array (
        * 'action', // anyone can access this action
        * 'action' => true, // same as above
        * 'action' => 'ADMIN', // you must have ADMIN permissions to access this action
        * 'action' => '->checkAction' // you can only access this action if $this->checkAction() returns true
        * );
        * </code>
        *
        * @var array
        */
       public static $allowed_actions = array (
       );

       public function init() {
          parent::init();

          // Note: you should use SS template require tags inside your templates
          // instead of putting Requirements calls here. However these are
          // included so that our older themes still work
          Requirements::themedCSS('reset');
          Requirements::themedCSS('layout');
          Requirements::themedCSS('typography');
          Requirements::themedCSS('form');
       }

    }

    I have removed the HomePage.ss file from the templates folder. I do, however have a HomePage.ss file in Layout.
    Here's that code:

    templates/Layout/HomePage.ss

    <div id="Banner">
    <img src="themes/tutorial/images/welcome.png" alt="Homepage image" />
    </div>
    <div id="Content" class="typography">
    $Content
    </div>

    I also have a HomePage.php file in the code folder.

    Here's that code:

    code/HomePage.php

    <?php
    /**
    * Defines the HomePage page type
    */

    class HomePage extends Page {
    static $db = array(
    );
    static $has_one = array(
    );
    }

    class HomePage_Controller extends Page_Controller {

    }

    I have run both the ?flush=1 and dev/build

    Any/all help is greatly appreciated.

    Thanks!

  • zenmonkey
    Avatar
    Community Member
    524 Posts

    Re: Can't Get $Layout Working Link to this post

    Do you get a blank page or just an empty ContentContainer?

    Also try adding ?isDev=1 to your URL to see if throws an error

    As an aside, if you're using 3.0.5 I'd start using the <% loop {method] %><% end_loop %> instead of <% control {method} %><% end_control %> as control is depreicated and may loose support in the future

  • goodness
    Avatar
    Community Member
    38 Posts

    Re: Can't Get $Layout Working Link to this post

    zenmonkey - Thank you for responding! The weird thing is -- I was having this issue when using the Tutorial theme. When I switched to the Simple theme everything worked fine.

    Oh - as an FYI I was getting an empty ContentContainer. The page was rendering. It was just empty.

    Thanks again!

  • RuthAdele
    Avatar
    Community Member
    18 Posts

    Re: Can't Get $Layout Working Link to this post

    Sounds like you just needed to run ?flush=1 on the page.

    520 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.