• YAMS and generated images in Wayfinder#

  • berndwegi Reply #1, 5 months, 1 week ago

    Reply
    Hello,

    I use Evo 1.0.5.

    I have a ressource generated with YAMS http://modx.com/extras/package/yams in 3 langunges. Each language has a seperate menutitle.

    I call the wayfinder like this (works fine):
     [[Wayfinder? &startId=`0` &outerClass=`nav` &rowTpl=`@FILE:assets/modules/yams/tpl/wayfinder/docr/row.tpl` &innerRowTpl=`@FILE:assets/modules/yams/tpl/wayfinder/docr/innerrow.tpl` ]]
    


    In my rowTpl I use images (rotated) for the menutitle instead of plain text. I call my snippet in the rowTpl like this:
    <li[+wf.id+][+wf.classes+]>
     <a href="(yams_docr:[+wf.docid+])" title="[[YAMS? &get=`data` &docid=`[+wf.docid+]` &from=`pagetitle`]]" [+wf.attributes+]> <img src="[[Generate_main_menu_img? &id=`[+wf.docid+]` &text=`((yams_data:[+wf.docid+]:menutitle_(yams_id)))` &lang=`(yams_id)` ]]" alt="" /> ((yams_data:[+wf.docid+]:menutitle_(yams_id))) </a>
     [+wf.wrapper+]
    </li>
    


    The snippets Generate_main_menu_img gets called in the src attribute of the Image.
    The snippet returns the src of the generated image for the navigation.

    The pages are cached, the wayfinder is cached and the snippet is cached because I dont want to generate the images new for each page-call. When I remove the cache like [! ... !] for the snipped it works fine. But when I cache it as in this version, nothing happens even if I delete the cache.

    The snipped. which generates my images looks like this:
    <?php
    $img_width = 23;
    $img_height = 260;
    $font_size = 23;
    $angle = 90;
    $font = "assets/fonts/svett.ttf";
    $path = 'assets/templates/standard/img/nav/'.$lang.'/'.$id.'.gif';
    
    $dimensions = imagettfbbox ( $font_size , $angle , $font , mb_strtoupper($text, 'UTF-8') );
    
    //grey inactive
    $im = imagecreate($img_width, $img_height);
    $white = ImageColorAllocate ($im, 240, 237, 235);
    $black = ImageColorAllocate ($im, 198, 199, 200);
    ImageTTFText ($im, $font_size, $angle, 23, -$dimensions[5], $black, $font, mb_strtoupper($text, 'UTF-8'));
    imagegif($im, $path);
    
    //red active
    $black = ImageColorAllocate ($im, 226, 0, 26);
    ImageTTFText ($im, $font_size, $angle, 23, -$dimensions[5], $black, $font, mb_strtoupper($text, 'UTF-8'));
    imagegif($im, 'assets/templates/standard/img/nav/'.$lang.'/'.$id.'a.gif');
    
    return $path;
    ?>
    


    Greetings
    Bernd



  • berndwegi Reply #2, 4 months, 3 weeks ago

    Reply
    Is there a way to get those generated images for the navigation cached?

    When I use the snipped cached with [! .... !] it outputs static content like
    yams_data:3::menutitle_de


  • virtualbear Reply #3, 4 months, 2 weeks ago

    Reply
    hi,

    not sure about the caching stuff but what about using
    if ( !file_exists('assets/templates/standard/img/nav/'.$lang.'/'.$id.'.gif') {}

    around you snippet ?
    it wouldn't be perf consuming and would help you not regenerating your img on each page call

    the only thing is you may have to write a plugin that empties the nav img folder onBeforeCacheUpdate or onCacheUpdate in order to be able o change the page titles without having to empty it a la mano
    something really easy to do actually

    have swing