Thanks much again, Matt, for your expertise!

On Thu, Dec 3, 2009 at 8:07 PM, Matt Jones <[email protected]> wrote:

>
> On Dec 3, 2009, at 6:08 PM, Dave Porter wrote:
>
> > Hi Owen,  Sorry yes this was a bit vague !
> >
> > This is what is currently in the Cookbook index.dryml for the front
> > page
> > So the '<preview-with-more name="recent recipes"
> > with="&Recipe.recent"/
> >> '
> >
> > Is the code that is displaying the list of recipes on the front page.
> >
> > I need to understand how this works ?
> >
>
> To start with, you typically want to figure out the context the tag
> ends up running in. Here, the with= attribute is setting the context
> to Recipe.recent (a named scope on Recipe that sorts models in
> descending order by created_at - it's defined in automatic_scopes).
> The recent scope accepts the number of records to limit the source as
> a parameter, or defaults it to 6 (as in this case).
>
> For the rest, track down the source of preview-with-more; you'll find
> it in rapid_plus.dryml (in the hobo plugin). As an aside, a good text
> editor with "Search all files" pointed at the hobo source is pretty
> much a standard tool - heck, it used to *be* the documentation.
>
> Anyway, the source of preview-with-more:
>
> <!-- Captures the common pattern of a list of "the first few" cards,
> along with a link to the rest. -->
> <def tag="preview-with-more" attrs="name">
>   <% name ||= collection_name.pluralize -%>
>   <section class="#{name.gsub(' ', '-').dasherize} preview-with-more"
> param="default">
>     <h3 param="heading"><%= name.titleize %></h3>
>     <a param="more">More <type-name plural lowercase/>...</a>
>     <collection param/>
>     <a action="new" if="&can_create?(this.new)" param="new-link">New <
> %= this.member_class.view_hints.model_name %></a>
>   </section>
> </def>
>
> Most of this should be pretty self-explanatory. The meat of the action
> here is in the collection tag. That's defined over in
> rapid_generics.dryml:
>
> <def tag="collection">
>   <ul class="collection #{collection_name :dasherize => true}" merge-
> attrs unless="empty?">
>     <li param="item" class="#{scope.even_odd} #{model_id_class}"
> repeat="&select_viewable">
>       <do param="default"><card param/></do>
>     </li>
>   </ul>
>   <empty-collection-message param="empty-message"/>
> </def>
>
> This creates the actual list of Recipe cards; note that the card tag
> is just a default here, as calling the collection tag like this:
>
> <collection>
>   <some-tag />
> </collection>
>
> Will repeat some-tag instead of card.
>
> Next you look up where the card for Recipe is defined; in this case,
> it's in app/views/taglibs/application.dryml (in the hobocookbook
> source):
>
> <extend tag="card" for="Recipe">
>   <old-card merge without-count>
>     <before-heading:><gravatar:user size='50' param/></before-heading:>
>     <creator-link: replace><div param="user">By: <a:user/></div></
> creator-link:>
>     <append-body:>
>       <div param="timestamp">
>         <if test="&this.created_at == this.updated_at">
>           <view:created-at.to-date/>
>         </if>
>         <else>
>           Updated: <view:updated-at.to-date/>
>         </else>
>       </div>
>     </append-body:>
>   </old-card>
> </extend>
>
> Note that this is extending the base card (autogenerated in app/views/
> taglibs/auto/rapid/cards.dryml):
>
> <def tag="card" for="Recipe">
>   <card class="recipe" param="default" merge>
>     <header: param>
>       <h4 param="heading"><a><name/></a></h4>
>     </header:>
>     <body: param>
>       <a:user param="creator-link"/>
>       <ht key="comments.collection.count" count="&this.comments.size">
>          <count:comments param/>
>       </ht>
>     </body:>
>   </card>
> </def>
>
> With the modifiers in the extended definition, the actual definition
> looks more like:
>
> <def tag="card" for="Recipe">
>   <card class="recipe" param="default" merge>
>     <gravatar:user size='50' param/>
>     <header: param>
>       <h4 param="heading"><a><name/></a></h4>
>     </header:>
>     <body: param>
>       <div param="user">By: <a:user/></div>
>       <ht key="comments.collection.count" count="&this.comments.size">
>          <count:comments param/>
>       </ht>
>       <div param="timestamp">
>         <if test="&this.created_at == this.updated_at">
>           <view:created-at.to-date/>
>         </if>
>         <else>
>           Updated: <view:updated-at.to-date/>
>         </else>
>       </div>
>     </body:>
>   </card>
> </def>
>
> One can follow this rabbit hole for quite a while longer, but I hope
> this helps!
>
> --Matt Jones
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Hobo Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<hobousers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/hobousers?hl=en.
>
>
>


-- 
Thanks,

Owen

Owen Dall
Barquin International
410-991-0811

--

You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers?hl=en.


Reply via email to