Hello
I have correctly followed the doc about loading pages dynamically with ajax from the tutorial and it’s working.
Now I  want to load my content not by pages, but by structure field limit.
My controller, JS, and template are exactly the same from the doc, I just added a structure like this
  entree:
    label: Artistes
    type: structure
    entry: >
      {{artiste}}<br />
      {{nom}} {{prenom}}
    fields:
      artiste:
        label: Artiste
        type: text
      nom :
        label: Nom
        type: text
      prenom:
        label: Prenom
        type: text
So each pages from $projects = page('projects')->children()->visible(); contains multiple entries, and I would like to load 3 structures from all structures by pages each time we click on “load more”.
I tried  $projects = page('projets')->children()->visible()->toStructure(); but it returns an error on $count    = $projects->count();
Any ideas ?
             
            
              
              
              
            
            
           
          
            
            
              If I get this right,  You want your load more button to load 3 entries from all entries of all the subpages?
That would mean that you first get all entries of all projects and adapt the code accordingly. In another thread I have posted a method how to collect all structure fields of all pages. You can then take it from there.
The toStructure() method can only be used on a structure field, not on a collection of subpages, therefore your code fails.
             
            
              
              
              
            
            
           
          
            
            
              
Yes, exactly.
I already found this function on this page. I think I have quite understand the goal of it, so I have integreted it into my controller.
The thing now is that I don’t have anny error, but the page doesn’t display any structure, and when I click to “load-more”, no entries is displayed. Where am I wrong ?
function createNewStructure($pages, $field) {
    $structure = new Structure();
    $key = 0;
    foreach($pages as $p) {
        foreach($p->$field()->toStructure() as $item) {
            $structure->append($key, $item);
            $key++;
        }
    }
    return $structure;
}
$projects = page('projects')->children()->visible();
$entries = createNewStructure($projects, 'entree');
$count    = $entries->count();
if(r::ajax() && get('offset') && get('limit')) {  
    $offset = intval(get('offset'));
    $limit  = intval(get('limit'));
    $entries = $entries->offset($offset)->limit($limit);
    $more = $count > $offset + 1;
} else {
    $offset   = 0;
    $limit    = 1;
    $entries = $entries->limit($limit);
} 
return compact('offset', 'limit', 'projects', 'more', 'entries');
then in the page with this :
 <?php foreach($entries as $project): ?>
                <?php snippet('project', compact('project')) ?>
                <?php endforeach ?> 
and the snippet
<?php foreach($project->entree()->toStructure() as $field): ?>
...
<?php endforeach ?>
             
            
              
              
              
            
            
           
          
            
            
              The snippet does not make sense. It should output a single entry item, e.g.
<li class="project"><?php echo $project->nom() ?></li>
Have you made sure to change the projects.json template as well:
<?php
$html = '';
foreach($entries as $project) {
  $html .= snippet('project', compact('project'), true);
}
$data['html'] = $html;
$data['more'] = $more;
echo json_encode($data);
             
            
              
              
              1 Like
            
            
           
          
            
            
              Sorry, I have not copied the correct code into my file. It works very well now.
Thank you very much !!!