Index: openacs-4/packages/xowiki/www/prototypes/news.page =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/prototypes/news.page,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/www/prototypes/news.page 28 Jul 2007 18:04:52 -0000 1.1 @@ -0,0 +1,120 @@ +# -*- tcl-*- +# $Id: news.page,v 1.1 2007/07/28 18:04:52 gustafn Exp $ +::xowiki::Object new -title "News" -text { + # + # A sample News object. + # + my initialize -parameter { + {-page_size:integer 10} + {-page_number:integer 1} + {-summary:boolean 0} + {-date ""} + {-tag ""} + {-ptag ""} + {-entries_of en:news-item} + } + + # The name filter is not the most efficient way of selecting + # autonamed entries. However, most times the number of news items + # is not overwhelming, so we can live with that for the time being. + # TODO: more efficient selection of autonamed entries + + # + # The following definition is the default rendering per + # news entry. This is executed in the context of every displayed page. + # + Class create EntryRenderer -instproc render {} { + my instvar package_id name title creator creation_user pretty_date description publish_date + [my set __parent] instvar weblog_obj + + set link [::$package_id pretty_link $name] + set more [expr {[$weblog_obj summary] ? + " \[#xowiki.weblog-more#\]" : ""}] + append more "

" + set day [lc_time_fmt [my set publish_date] "%x"] + set my_footer [my htmlFooter] + + append content "
" \ + "

$title

" \ + " ($day)
" \ + $description $more $my_footer \n\ + "
" + } + + # + # The following definition is the renderer for the full weblog. + # This is executed in the context of the whole weblog object + # + Class create NewsRenderer -instproc render {} { + my instvar filter_msg link name prev_page_link next_page_link title + + set filter "" + set prev "" + set next "" + + if {[info exists filter_msg]} { + set filter "
$filter_msg
" + } + if {[info exists prev_page_link]} { + set prev "\ + Previous Page" + } + if {[info exists next_page_link]} { + set next "\ + Next Page" + } + set page [my set __page] + set rss [$page include_portlet \ + "rss-button -title {[$page title]} -entries_of [my entries_of]"] + #set rss [list [self] [lsort [my info vars]]] + return "
$filter [next] $prev $next
$rss
" + } + + my proc content {} { + my get_parameters + set page [my info parent] + + if {[$page exists __including_page]} { + set i [$page set __including_page] + set exclude_item_ids [$i item_id] + $i set render_adp 0 ;# no double substitutions + #my log "--W including page $i" + } else { + #my log "--W NO including page" + set exclude_item_ids [$page item_id] + } + + # on the news page, an edit-new should not create an object + ::xo::cc set_parameter object_type ::xowiki::Page + ::xo::cc set_parameter autoname 1 + + # use the above defined custom renderers + set renderer [self]::NewsRenderer + set entry_renderer [self]::EntryRenderer + + set w [::xowiki::Weblog new -destroy_on_cleanup \ + -package_id $package_id \ + -page_size $page_size \ + -page_number $page_number \ + -summary $summary \ + -date $date \ + -category_id [ns_queryget category_id] \ + -tag $tag \ + -ptag $ptag \ + -entry_label "News Articles" \ + -exclude_item_ids $exclude_item_ids \ + -entry_renderer $entry_renderer \ + -entry_flag __no_form_page_footer \ + -entries_of $entries_of \ + ] + $w set __page $page + $w mixin add $renderer + return [$w render] + } + +} + + +