Jump to content

Tutorial: How to show all speakers in a speakers block.


bernhard
 Share

Recommended Posts

Got a support request from @dotnetic today and thought I'd share it with you ? 

Imagine you have all speakers saved under /speakers with template "speaker", eg /speakers/someone and /speakers/anotherperson

Now you want to show/list those persons in the RockPageBuilder block called "Speakers". That's very straightforward ? 

In Speakers.php you add a helper method:

<?php
...
class Speakers extends Block {
  ...
  public function allSpeakers() {
    return $this->wire->pages->find("template=person");
  }
}

And in the view file Speakers.view.php:

<ul>
<?php foreach($block->allSpeakers() as $speaker): ?>
	<li><?= $speaker->title ?></li>
<?php endforeach; ?>
</ul>

Or when using LATTE in Speakers.latte:

<ul>
  <li n:foreach="$block->allSpeakers() as $speaker">
    {$speaker->title}
  </li>
</ul>

 

  • Like 4
Link to comment
Share on other sites

Thanks for sharing. Seems I need to learn more about MVC and PHP/Latte templates for my next PW project. For small sites I am using the delayed output strategy (main.inc.php etc.). But as projects grow, I start to structure stuff in subfolders inside site/template folder.

Link to comment
Share on other sites

Yeah the same technique applies to custom page classes as well. Just add methods there with a talking name and your code will get a lot cleaner and better. Think for example of a situation where you are using $pages->find("template=something") in your template files in several spots and you realise that you forgot to change the sort order to random.

When using $pages->find() in your template files you need to find all instances and change the code there. When using $page->findRandomSomething() you simply change the logic in your custom page classes method and everywhere it will be changed immediately.

Check out my videos on youtube for that topic:

1) https://www.youtube.com/watch?v=7CoIj--u4ps&t=2124s

2) https://www.youtube.com/watch?v=D651-w95M0A

 

  • Like 1
  • Thanks 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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...