Search code examples
phpconcrete5

In template page_list get image attribute Concrete5


My following code is based on 1.Get current URL 2.Go through array and check if in url value = to value in array do this:

$on_this_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
foreach ($city_array as $sandwich) {
    if (strpos($on_this_link, $sandwich) == true) {
        $sandwich = trim($sandwich, '/');
        $city     = $sandwich;
        if ($city == 'newyork') {
            foreach ($category_array as $double_sandwich) {
                if (strpos($on_this_link, $double_sandwich) == true) {
                    $double_sandwich = trim($double_sandwich, '/');
                    $category_is = $double_sandwich;
                    Loader::model('page_list');
                    $nh = Loader::helper('navigation');                  
                    $pl = new PageList();
                    $pl->filterByAttribute('city', '%' . $city . '%', 'like');
                    $pl->filterByAttribute('category','%'.$category_is.'%','like');                 
                    $pl->sortByDisplayOrder();
                    $pagelist = $pl->get();
                    foreach ($pagelist as $p) {
                    echo '<li> <a href="' . $nh->getLinkToCollection($p) . '">' .htmlspecialchars($p->getCollectionName()) . '</a> </li>';
                         ?>
                 }
           }
     }
}

So It will show me only pages that have the same attribute with URL Each of this page has image attribute that I want to show. How can I pass this Image Attribute??


Solution

  • Check out the comments in the page list block's view template: https://github.com/concrete5/concrete5/blob/master/web/concrete/blocks/page_list/view.php#L33

    You can get image attributes by putting some code like this inside your foreach ($pagelist as $p) loop:

        $img = $p->getAttribute('example_image_attribute_handle');
        if ($img) {
            //you could output the original image at its full size like so:
            echo '<img src="' . $img->getRelativePath() . '" width="' . $img->getAttribute('width') . '" height="' . $img->getAttribute('height') . '" alt="" />';
    
            //or you could reduce the size of the original and output that like so:
            $thumb = Loader::helper('image')->getThumbnail($img, 200, 100, false); //<--200 is width, 100 is height, and false is for cropping (change to true if you want to crop the image instead of resize proportionally)
            echo '<img src="' . $thumb->src . '" width="' . $thumb->width . '" height="' . $thumb->height . '" alt="" />';
        }