Ok, I managed to work out a little hack that's worked fine for now,
but I was pointed to using the Set class, which I've known about for
ages, but never used.

Now on my below array for pastes, I do this:

Set::check($results, '{n}.Paste.paste') to see if the key exists,
however I always get a return of false.  Can anyone see why this might
be?

On 9/25/07, Tane Piper <[EMAIL PROTECTED]> wrote:
> Hey folks,
>
> I've created a GeSHi Behaviour for my application I am working on.
> Here is the code:
>
> <?php
>
> class GeshiBehavior extends ModelBehavior {
>
>         function setup (&$model, $settings = array()) {
>                 $default = array(
>                         'colour1' => '#fff',
>                         'colour2' => '#eee'
>                 );
>
>                 if(!isset($this->settings[$model->name])) {
>                         $this->settings[$model->name] = $default;
>                 }
>
>                 $this->settings[$model->name] =
> array_merge($this->settings[$model->name], ife(is_array($settings),
> $settings, array()));
>         }
>
>         function afterFind(&$model, $results) {
>                 foreach ($results as $key => $val) {
>                         if(isset($val['Paste']['paste'])) {
>                                 $results[$key]['Paste']['paste_formatted'] =
> $this->_generate($val['Paste']['paste'],
> strtolower($val['Language']['language']), $model);
>                         }
>                 }
>                 pr($results);
>                 return $results;
>         }
>
>         function _generate($source,$lang,&$model) {
>                 vendor('geshi/geshi');
>
>                 $geshi =& new GeSHi($source,$lang);
>                 $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 2);
>                 $geshi->set_line_style('background:' .
> $this->settings[$model->name]['colour1'] . ';', 'background:' .
> $this->settings[$model->name]['colour2'] . ';');
>                 $geshi->set_header_type(GESHI_HEADER_DIV);
>
>                 return $geshi->parse_code();
>         }
> }
> ?>
>
> Now, when I view my /pastes/view/x, this behavior works fine.  It
> takes the raw code from the paste field and generates the
> paste_formatted sudo-field which is displayed.  Here is an example of
> an array from my /paste/view/x:
>
> Array
> (
>     [0] => Array
>         (
>             [Paste] => Array
>                 (
>                     [id] => 9
>                     [paste] => $pastemonkey(document).ready(function() {
>
>         /* Basic Bind Functions */
>
>         $pastemonkey('.new-paste').bind('click.newPaste', function(){
>                         $pastemonkey('
> ').addClass('ajax-new-paste').css({display: 'none'}).insertBefore('.pastes');
>                         $pastemonkey('.ajax-new-paste').load('/pastes/add', 
> function(){
>                                 $pastemonkey(this).animate({height: 'show', 
> opacity: 'show'});
>                         });
>                         return false;
>         });
>
>         $pastemonkey('.home').bind('click.home', function(){
>                 $pastemonkey('.paste').load($pastemonkey(this).attr('href'));
>                 return false;
>         });
>
>         /* Live Query Functions*/
>
>         $pastemonkey('.cancel-paste').livequery(function(){
>                 $pastemonkey(this).bind('click.cancelPaste', function(){
>                         
> $pastemonkey('.ajax-new-paste').animate({height:'hide',
> opacity:'hide'}).remove();
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.cancelPaste');
>         });
>
>         $pastemonkey('a', '.paging').livequery(function(){
>                 $pastemonkey(this).bind('click.paging', function(){
>                         
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.paging');
>         });
>
>         $pastemonkey('.viewPaste').livequery(function(){
>                 $pastemonkey(this).bind('click.viewPaste', function(){
>                         
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.viewPaste');
>         });
>
>         /* AJAX Start/Stop Functions*/
>
>         $pastemonkey('#main').ajaxStart(function(){
>                 $pastemonkey('.loading').animate({opacity:'show', 
> backgroundColor:
> '#0f0'}, 'slow', 'linear')
>                 .animate({backgroundColor: '#fff'});
>         });
>         $pastemonkey('#main').ajaxStop(function(){
>                 $pastemonkey('.loading').animate({opacity: 'hide'});
>         });
>
>
> });
>                     [note] => Paste Monkey JS File
>                     [author] => Tane
>                     [tags] => Paste Monkey, Jquery
>                     [parent_id] =>
>                     [language_id] => 33
>                     [created] => 2007-09-25 10:41:26
>                     [expiry] => 2007-09-25 10:40:00
>                     [paste_formatted] =>
>
>    1.
>       $pastemonkey(document).ready(function() {
>    2.
>
>    3.
>               /* Basic Bind Functions */
>    4.
>
>    5.
>               $pastemonkey('.new-paste').bind('click.newPaste', function(){
>    6.
>
> $pastemonkey('<div></div>').addClass('ajax-new-paste').css({display:
> 'none'}).insertBefore('.pastes');
>    7.
>
> $pastemonkey('.ajax-new-paste').load('/pastes/add', function(){
>    8.
>
> $pastemonkey(this).animate({height: 'show', opacity: 'show'});
>    9.
>                               });
>   10.
>                               return false;
>   11.
>               });
>   12.
>
>   13.
>               $pastemonkey('.home').bind('click.home', function(){
>   14.
>
> $pastemonkey('.paste').load($pastemonkey(this).attr('href'));
>   15.
>                       return false;
>   16.
>               });
>   17.
>
>   18.
>               /* Live Query Functions*/
>   19.
>
>   20.
>               $pastemonkey('.cancel-paste').livequery(function(){
>   21.
>                       $pastemonkey(this).bind('click.cancelPaste', function(){
>   22.
>
> $pastemonkey('.ajax-new-paste').animate({height:'hide',
> opacity:'hide'}).remove();
>   23.
>                               return false;
>   24.
>                       });
>   25.
>               }, function(){
>   26.
>                       $pastemonkey(this).unbind('click.cancelPaste');
>   27.
>               });
>   28.
>
>   29.
>               $pastemonkey('a', '.paging').livequery(function(){
>   30.
>                       $pastemonkey(this).bind('click.paging', function(){
>   31.
>
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>   32.
>                               return false;
>   33.
>                       });
>   34.
>               }, function(){
>   35.
>                       $pastemonkey(this).unbind('click.paging');
>   36.
>               });
>   37.
>
>   38.
>               $pastemonkey('.viewPaste').livequery(function(){
>   39.
>                       $pastemonkey(this).bind('click.viewPaste', function(){
>   40.
>
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>   41.
>                               return false;
>   42.
>                       });
>   43.
>               }, function(){
>   44.
>                       $pastemonkey(this).unbind('click.viewPaste');
>   45.
>               });
>   46.
>
>   47.
>               /* AJAX Start/Stop Functions*/
>   48.
>
>   49.
>               $pastemonkey('#main').ajaxStart(function(){
>   50.
>
> $pastemonkey('.loading').animate({opacity:'show', backgroundColor:
> '#0f0'}, 'slow', 'linear')
>   51.
>                       .animate({backgroundColor: '#fff'});
>   52.
>               });
>   53.
>               $pastemonkey('#main').ajaxStop(function(){
>   54.
>                       $pastemonkey('.loading').animate({opacity: 'hide'});
>   55.
>               });
>   56.
>
>   57.
>
>   58.
>       });
>
>
>                 )
>
>             [Parent] => Array
>                 (
>                     [id] =>
>                     [paste] =>
>                     [note] =>
>                     [author] =>
>                     [tags] =>
>                     [parent_id] =>
>                     [language_id] =>
>                     [created] =>
>                     [expiry] =>
>                 )
>
>             [Language] => Array
>                 (
>                     [id] => 33
>                     [language] => JavaScript
>                 )
>
>             [Tag] => Array
>                 (
>                     [0] => Array
>                         (
>                             [id] => 2
>                             [tag] => Jquery
>                         )
>
>                     [1] => Array
>                         (
>                             [id] => 1
>                             [tag] => Paste Monkey
>                         )
>
>                 )
>
>         )
>
> )
>
> Now, I am trying to use the behavior on another view,
> /languages/view/x.  This is a view where you can see all posts related
> to the specific language.  For the same example above, here is an
> output of my array:
>
> Array
> (
>     [0] => Array
>         (
>             [Language] => Array
>                 (
>                     [id] => 33
>                     [language] => JavaScript
>                 )
>
>             [Paste] => Array
>                 (
>                     [0] => Array
>                         (
>                             [id] => 9
>                             [paste] => 
> $pastemonkey(document).ready(function() {
>
>         /* Basic Bind Functions */
>
>         $pastemonkey('.new-paste').bind('click.newPaste', function(){
>                         $pastemonkey('
> ').addClass('ajax-new-paste').css({display: 'none'}).insertBefore('.pastes');
>                         $pastemonkey('.ajax-new-paste').load('/pastes/add', 
> function(){
>                                 $pastemonkey(this).animate({height: 'show', 
> opacity: 'show'});
>                         });
>                         return false;
>         });
>
>         $pastemonkey('.home').bind('click.home', function(){
>                 $pastemonkey('.paste').load($pastemonkey(this).attr('href'));
>                 return false;
>         });
>
>         /* Live Query Functions*/
>
>         $pastemonkey('.cancel-paste').livequery(function(){
>                 $pastemonkey(this).bind('click.cancelPaste', function(){
>                         
> $pastemonkey('.ajax-new-paste').animate({height:'hide',
> opacity:'hide'}).remove();
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.cancelPaste');
>         });
>
>         $pastemonkey('a', '.paging').livequery(function(){
>                 $pastemonkey(this).bind('click.paging', function(){
>                         
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.paging');
>         });
>
>         $pastemonkey('.viewPaste').livequery(function(){
>                 $pastemonkey(this).bind('click.viewPaste', function(){
>                         
> $pastemonkey('#main').load($pastemonkey(this).attr('href'));
>                         return false;
>                 });
>         }, function(){
>                 $pastemonkey(this).unbind('click.viewPaste');
>         });
>
>         /* AJAX Start/Stop Functions*/
>
>         $pastemonkey('#main').ajaxStart(function(){
>                 $pastemonkey('.loading').animate({opacity:'show', 
> backgroundColor:
> '#0f0'}, 'slow', 'linear')
>                 .animate({backgroundColor: '#fff'});
>         });
>         $pastemonkey('#main').ajaxStop(function(){
>                 $pastemonkey('.loading').animate({opacity: 'hide'});
>         });
>
>
> });
>                             [note] => Paste Monkey JS File
>                             [author] => Tane
>                             [tags] => Paste Monkey, Jquery
>                             [parent_id] =>
>                             [language_id] => 33
>                             [created] => 2007-09-25 10:41:26
>                             [expiry] => 2007-09-25 10:40:00
>                         )
>
>                 )
>
>         )
>
> )
>
> As you can see, both arrays have $var[$key]['Paste']['paste'], but
> when I try view the language page, I get that paste_formatted is not
> defined.  Can anyone see what i'm doing wrong in my behavior?  Both
> models have var $actsAs = array('Geshi');
>
> Thanks,
>
> --
> Tane Piper
> http://digitalspaghetti.me.uk
>
> This email is: [ ] blogable [ x ] ask first [ ] private
>


-- 
Tane Piper
http://digitalspaghetti.me.uk

This email is: [ ] blogable [ x ] ask first [ ] private

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to