Got it nad it makes sense. Thank you!
Quoting Sean Cribbs <[EMAIL PROTECTED]>:
> Todd: I'd make a few tweaks so you don't have problems:
>
> (Answerbookpage.content_columns.dup).each do |column|
> tag "faq:#{column.name}" do |tag|
> tag.locals.answer.send(column.name).to_s if tag.locals.answer
> end
> end
>
> [snip]
>
> tag "faq:each" do |tag|
> result = ""
> Answerbookpage.find(:all).each do |item|
> tag.locals.answer = item
> result << tag.expand
> end
> result
> end
>
> Let me explain why I suggest these.
> 1) Unless you want to display things like foreign keys, you probably
> don't want ALL of the columns from your Answerbookpage model -- just the
> ones that have actual useful content.
> 2) Scoping the tag under "faq" will prevent tags like <r:answername />
> from working under any invalid context.
> 3) In both "faq:each" and the dynamically created tags, it's best to
> define your own local rather than overwriting page. tags.locals.page
> should always refer to the currently rendering page (including
> contextual ones). I'm assuming you just grabbed some code from
> "children:each". Besides "tag.locals.answer" says better what you're
> passing around.
> 4) I added ".to_s if tag.locals.answer" at the end of your line for a
> little safety. First, sometimes objects that you could get from a model
> could return some ugly inspect string instead of a real representation,
> and also, if somehow your tag gets out of context or gets 'nil' in
> tag.locals.answer, you won't output anything ugly.
> 5) Everything you are outputting is a string , so 'result' in "faq:each"
> should be a string.
>
> Hope this helps!
>
> Cheers,
> Sean Cribbs
>
> Todd McGrath wrote:
> > Well, that is exactly what I needed. Thanks again, Jamie!
> >
> > I can't say if the following code is the best, most efficient way, but here
> it
> > is for posterity sake-
> >
> > module FaqTag
> > include Radiant::Taggable
> >
> > class TagError < StandardError; end
> >
> > # <r:answername />
> > # <r:summary />
> > # etc...
> > #
> > (Answerbookpage.column_names.dup).each do |method|
> > tag(method.to_s) do |tag|
> > tag.locals.page.send(method)
> > end
> > end
> >
> >
> > tag "faq" do |tag|
> > tag.expand
> > end
> >
> > tag "faq:each" do |tag|
> > result = []
> > Answerbookpage.find(:all).each do |item|
> > tag.locals.child = item
> > tag.locals.page = item
> > result << tag.expand
> > end
> > result
> > end
> >
> > end
> >
> >
> >
> > Quoting Jamie Wilkinson <[EMAIL PROTECTED]>:
> >
> >
> >> Howdy Todd,
> >>
> >> A combination of cloning the <r:children:each> tag (slightly lower in
> >> the same file) and the metamethod you pointed out should work just
> >> fine. So it would look more like:
> >>
> >> <r:faq:each>
> >> <r:answername />
> >> <r:summary />
> >> </r:faq:each>
> >>
> >> -jamie
> >>
> >> On Jan 10, 2007, at 7:46 AM, Todd McGrath wrote:
> >>
> >>
> >>> Hello again,
> >>>
> >>> I'm making some progress on extensions and now I'm looking for a
> >>> little push in
> >>> the right direction.
> >>>
> >>> I'm working on an extension for displaying data from database for
> >>> the FAQ
> >>> section of a site using tags (mental branch).
> >>>
> >>> * Created a FaqExtension and include the tag:
> >>>
> >>> def activate
> >>> Page.send :include, FaqTag
> >>> end
> >>>
> >>> * in lib/faq_tag.rb:
> >>> module FaqTag
> >>> include Radiant::Taggable
> >>>
> >>> class TagError < StandardError; end
> >>>
> >>> tag "faq" do |tag|
> >>> faq = Answerbookpages.find(:all)
> >>> raise TagError.new("Faq cannot be found") unless faq
> >>> tag.locals.faq = faq
> >>> tag.expand
> >>> end
> >>>
> >>> tag "faqhello" do |tag|
> >>> "Hello #{tag.attr['name'] || 'mundo'}!"
> >>> end
> >>>
> >>> end
> >>>
> >>> * "faqhello" (<r:faqhello/>) works and "faq" tag is retrieving from
> >>> db.
> >>> (Obviously, I have an Answerbookpages class
> >>>
> >>> I'm looking for some insight to take it further.
> >>>
> >>> In my FAQ page, I'd like to use something like the following:
> >>>
> >>> <r:faq>
> >>> <r:answername />
> >>> <r:summary />
> >>> </r:faq>
> >>>
> >>> where "answername" and "summary" are fields in the answerbookpages
> >>> table.
> >>>
> >>> Not sure where to begin..
> >>>
> >>> In the StandardTags class, I see:
> >>> #
> >>> # <r:url />
> >>> # <r:title />
> >>> # etc...
> >>> #
> >>> ((Page.column_names.dup << 'url') - ['class_name', 'created_by',
> >>> 'updated_by']).each do |method|
> >>> tag(method.to_s) do |tag|
> >>> tag.locals.page.send(method)
> >>> end
> >>>
> >>> Maybe the answer I'm looking for is something similar to this?
> >>>
> >>> Any thoughts or suggestions are really appreciated
> >>>
> >>> Thank you,
> >>> Todd
> >>>
> >>> _______________________________________________
> >>> Radiant mailing list
> >>> Post: [email protected]
> >>> Search: http://radiantcms.org/mailing-list/search/
> >>> Site: http://lists.radiantcms.org/mailman/listinfo/radiant
> >>>
> >> _______________________________________________
> >> Radiant mailing list
> >> Post: [email protected]
> >> Search: http://radiantcms.org/mailing-list/search/
> >> Site: http://lists.radiantcms.org/mailman/listinfo/radiant
> >>
> >>
> >
> >
> > _______________________________________________
> > Radiant mailing list
> > Post: [email protected]
> > Search: http://radiantcms.org/mailing-list/search/
> > Site: http://lists.radiantcms.org/mailman/listinfo/radiant
> >
> >
>
>
_______________________________________________
Radiant mailing list
Post: [email protected]
Search: http://radiantcms.org/mailing-list/search/
Site: http://lists.radiantcms.org/mailman/listinfo/radiant