Jump to content

Module: Template Latte Replace


tpr
 Share

Recommended Posts

2 minutes ago, Nicolas said:

Hi,

Has anyone succeeded running Hanna Code with Latte template. I'm strugling getting them to work together. Is there  a setting to prevent latte to process Hanna Code tags ?

Thanks.

I haven't tried, but maybe changing the Open and Close tag settings in the Hanna code config might help you get around it:

Admin > Modules > Hanna Code Text Formatter

Link to comment
Share on other sites

@adrian Already tried that but whatever the open and close tag choosen, Latte template will try to load the file with the name of the code. For example i have a Hanna code named "quote". Then i've got the following this error : Error: Exception: Missing template file '/Volumes/DATA/www/ceea/site/templates/views/quote.latte'

Link to comment
Share on other sites

In the latte file i've got the following code

<div class="entry-main">
  <h3 class="entry-title ui-title-inner">{$page->title|noescape}</h3>
  <div class="entry-content">
    {$page->body|noescape}
  </div>
</div>

The body field is configured to process Hanna Code as a text formatter

Link to comment
Share on other sites

It is interesting because this is the way I use it and no issues here. What is your Latte module version and the open-close tags for Hanna?  Do you have other textformatters applied to body? I have Video Embed for Youtube/Vimeo and they work fine together.

Link to comment
Share on other sites

  • 3 weeks later...

I really like this module and the ease of the Latte syntax, but when trying to start my first project (both in Latte & PW) I found the following questions:

  1. Where implement the business logic for the @layout file? if this file is only for output and its not a good practice to include php logic. For example I need to do some processing before printing the site header and the area for the logged user.
  2. Following the previous question, if the option for including Blocks require a more complex data process, where I do that? I have no controller file for Blocks/Chunks and only can pass variables directly inside the Latte view that include it
  3. The multi-language native processwire system does not work, for example the url "sitename.com/es/" causes an include error.

I want to implement my sites using Latte, but now I'm worried if it suits the complexities that can appear during dev

Link to comment
Share on other sites

Hi,

perhaps Latte is not the best choice for beginners in PW but I guess you have some programming background judging from your questions :)

1. You can use ready.php for example for such purposes (or init.php, _init.php, perhaps _main.php). Or you can add two blocks to the layout, one for the site header and one for the logged in user. You can leave the block you don't need empty and it won't be rendered. I sometimes use PHP logic in my view files but it's rather because my lazyness :)

2. Well you do your logic in {template}.php and set variables to output in {template}.latte. You can use another .latte file in {template}.php, so eg. you can include login.latte or register.latte if you need that. You can even render a chunk in the php (controller) file to a variable and use in the final view file.

3. Could you provide more details? I've done all my PW multilanguage sites with Latte and haven't encountered such an error.

I think Latte is just as good as Twig or others, maybe a bit more forgivable in some cases. So I think the question for you is perhaps to use a template engine or not.

  • Like 2
Link to comment
Share on other sites

  • 3 weeks later...

Here are two macros that I started to use recently to avoid passing full page objects and make things easier.

I usually set "common" pages in ready.php like this:

// Pages
$view->homepage = $pages->get(1);
$view->contactPage = $pages->get(1033);
// PageArrays
$view->menuItems = $pages->find('id=1010|1020|1030,sort=sort');

But instead of this I set only ID (selector):

// Pages
$view->homepage = 1
$view->contactPage = 1033;
// PageArrays
$view->menuItems = 'id=1010|1020|1030,sort=sort';

Now in latte template files I use the macro "n:page" or "n:pages", which automatically sets the "$p" variable ("$pArr" in case of n:pages).

Basically it sets the context:

<a n:page="$contactPage" class="contact" href="{$p->url}">{$p->title}</a>
<ul n:pages="$menuItems" n:inner-foreach="$pArr as $p">
    <li class="{$p|activeClass|noescape}">
        <a href="{$p->url}">{$p->title|noescape}</a>
    </li>
</ul>

You can use this if you prefer "normal" macros instead "n:macros":

{page $contactPage}
    <p>{$p->httpUrl}</p>
{/page}

And here are the macros (put it in site/ready.php):

$view->_addMacro['page'] = array(
    'page',
    '$p = \ProcessWire\wire("pages")->get(%node.word)',
    ';'
);

$view->_addMacro['pages'] = array(
    'pages',
    '$pArr = \ProcessWire\wire("pages")->find(%node.word)',
    ';'
);

 

  • Like 4
Link to comment
Share on other sites

Another tip today: a filter to easily get pages in templates :)

Usage:

// homepage url (1: page ID)
<a href="{(1|getPage)->url}" class="logo">

// custom selector
<a href="{('name=about'|getPage)->url}" class="logo">

Filter (add to ready.php):

$view->_filters['getPage'] = function ($selector) {
    return isset($selector) ? wire('pages')->get($selector) : false;
};

I wouldn't recommend to use it with selectors but it's there if needed. It's better to use with variables set in template php files.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

v2.4 is up:

  • added additional filters and macros (optional, see README)
  • added 'languages', 'fields', 'templates', 'logs' to the default API variables (suggested by Pixrael)
  • remove cache directory on uninstall

 

  • Like 2
Link to comment
Share on other sites

About the API variables: It seems perfect because in any medium projects you need almost all those variables, then from factory you have all the infrastructure ready to work. If you need something from the PW API it's there, it's much better for newbies. If you are a fan of optimizations (you are supposed to be a smart programmer) you can go to the module source and remove it, or whatever you want to do with it.

Link to comment
Share on other sites

I was about to make (some) fuels optional but haven't noticed performance issues having all enabled. Editing the module is not a smart option, I can add a hook instead to modify the fuels to be loaded, if there's a need.

Link to comment
Share on other sites

  • 1 month later...

The new v025 has a new feature "Use latte extension" that allows replacing PHP templates with Latte files, resulting in a cleaner structure. Note that /site/templates/admin.php needs to be renamed to admin.latte when using this. On existing installations it is recommended to clear the cache too.

  • Like 1
Link to comment
Share on other sites

v027 contains some code improvements. There are two new filters, "count" and "breadcrumb". The latter is a bit different from the rest because it generates markup but it has many options to fine-tune. Currently it doesn't generate any separators between the items, I think it's better to do with CSS but let me know if you think otherwise.

  • root: root page to start the breadcrumb from (selector or Page). Default: Home page
  • addHome: whether to prepend the Home page. Default: true
  • addCurrent: append the current page. Default: false
  • addCurrentLink: whether to add link when appending the current page. Default: false
  • class: CSS class to add to the "ul" tag. Default: "breadcrumb". Pass an empty string to remove class.
  • id: CSS id to add to the "ul" tag. Default: none (no id added)
  • addAttributes: add "data-page" attributes to 'LI' tags with the corresponding page id. Default: false
{$page|breadcrumb|noescape}
{$page|breadcrumb:array('addCurrent' => true, 'addHome' => false, 'addCurrentLink' => true)|noescape}
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...