Small Correction: you get a "private mehod 'gsub'" error. had to
change wkly_cal_controller.rb in index to:
a = params.include?(:starts_at) ? params[:starts_at] :
(Date.today - 2).to_s
b = params.include?(:ends_at) ? params[:ends_at] :
(Date.today + 4).to_s
@wkly_cal = Time.parse(a).to_date, Time.parse(b).to_date
On Oct 3, 12:17 pm, infinteVerve <[EMAIL PROTECTED]> wrote:
> I got the idea from this
> post:http://z3c.blogspot.com/2008/01/dynamic-calendar-helper-changing-mont...
> If anyone has suggestions on a better way to do it, I'd love to know.
> Thanks.
>
> Basically, I just created a new route in routes.rb >
> map.connect 'wkly_cal/:starts_at/:ends_at',
> :controller => 'wkly_cal',
> :action => 'index'
>
> So, the url can set the date range. Added this to the
> wkly_cal_controller.rb: (under index)
> a = params.include?(:starts_at) ? params[:starts_at] :
> Date.today - 2
> b = params.include?(:ends_at) ? params[:ends_at] :
> Date.today + 2
>
> @wkly_cal = Time.parse(a).to_date, Time.parse(b).to_date
>
> So going to just "wkly_cal/" will show this week. Then the following
> code wen into wkly_cal_helper.rb
> def weekly_options
> {
> :starts_at => @wkly_cal[0] ,
> :ends_at =>
> @wkly_cal[1] }
> end
>
> So in the view (index) I now have this:
> <h1>Weekly Calendar</h1>
> <% for lesson in @lessons %><%end%>
> <%= week_view(weekly_options) do |range|
> cell_text = ""
> cell_attrs = {}
>
> @lessons.each do |e|
> #if range.first.to_date == e.starts_at.to_date#range.include?
> (e.starts_at.to_datetime)
> if range.include?(e.start_date.to_datetime)
> cell_text << "<div class='event-container'>\n"
>
> cell_text << lesson.student_name
> cell_text << "\n"
> cell_text << "</div>\n"
> end
> end
> [cell_text, cell_attrs]
> end
> -%>
>
> The actual links is set in the WeekViewHelper: (cal << next_link, cal
> << prev_link)
> require 'date'
>
> # Author: Josh Adams
> # This helper is based on CalendarHelper.
> # WeekViewHelper allows you to draw a databound week view calendar
> with fine-grained CSS formatting
> module WeekViewHelper
> VERSION = '0.0.1'
>
> # Returns an HTML week-view calendar. In its simplest form, this
> method generates a plain
> # calendar (which can then be customized using CSS) for a given
> span of days.
> # However, this may be customized in a variety of ways -- changing
> the default CSS
> # classes, generating the individual day entries yourself, and so
> on.
> #
> # The following options are required:
> # :starts_at
> # :ends_at
> #
> # The following are optional, available for customizing the
> default behaviour:
> # :table_class => "week-view" # The class for the
> <table> tag.
> # :day_name_class => "dayName" # The class is for the
> names of the days, at the top.
> # :day_class => "day" # The class for the
> individual day number cells.
> # This may or may not
> be used if you specify a block (see below).
> # :show_today => true # Highlights today on
> the calendar using the CSS class 'today'.
> # # Defaults to true.
> # :previous_span_text => nil # Displayed left if
> set
> # :next_span_text => nil # Displayed right if
> set
> #
> # For more customization, you can pass a code block to this
> method, that will get two argument, both DateTime objects,
> # and return a values for the individual table cells. The block
> can return an array, [cell_text, cell_attrs],
> # cell_text being the text that is displayed and cell_attrs a hash
> containing the attributes for the <td> tag
> # (this can be used to change the <td>'s class for customization
> with CSS).
> # This block can also return the cell_text only, in which case the
> <td>'s class defaults to the value given in
> # +:day_class+. If the block returns nil, the default options are
> used.
> #
> # Example usage:
> # week_view(:starts_at => (Date.today - 5), :ends_at =>
> Date.today) # This generates the simplest possible week-view.
> # week_view(:starts_at => (Date.today - 5), :ends_at =>
> Date.today, :table_class => "calendar_helper"}) # This generates a
> week-view, as
>
> #
> # before, but the <table>'s class
>
> #
> # is set to "calendar_helper".
> # week_view(:starts_at => (Date.today - 5), :ends_at =>
> Date.today) do |s| # This generates a simple week-view, but gives
> special spans
> # if listOfSpecialSpans.include?(s) # (spans that are
> in the array listOfSpecialSpans) one CSS class,
> # ["", {:class => "specialSpan"}] # "specialSpan", and
> gives the rest of the spans another CSS class,
> # else # "normalSpan".
> You can also use this to highlight the current time differently
> # ["", {:class => "normalSpan"}] # from the rest of
> the days, etc.
> # end
> # end
> #
> # For consistency with the themes provided in the calendar_styles
> generator, use "specialSpan" as the CSS class for marked days.
> #
> def week_view(options = {}, &block)
> raise(ArgumentError, "No start date given") unless
> options.has_key?(:starts_at)
> raise(ArgumentError, "No end date given") unless options.has_key?
> (:ends_at)
> span = (options[:ends_at] - options[:starts_at]).to_i # Get the
> number of days represented by the span given
> dates = (options[:starts_at]..options[:ends_at])
> start_time = 13
> end_time = 21
> time_range = (start_time..end_time).to_a
> duration = 15
>
> block ||= Proc.new {|d| nil}
> defaults = {
> :table_class => 'week-view',
> :day_name_class => 'dayName',
> :day_class => 'day',
> :show_today => true,
> :previous_span_text => nil,
> :next_span_text => nil
>
> }
> options = defaults.merge options
>
> #### NEXT AND PREVIOUS LINKS ####
> next_starts_at = options[:ends_at] + 1
> next_ends_at = next_starts_at + 6
> next_link = link_to('Next >>', :starts_at =>
> next_starts_at, :ends_at => next_ends_at)
> prev_starts_at = options[:starts_at] - (span + 1)
> prev_ends_at = options[:starts_at] - 1
> prev_link = link_to('<< Prev', :starts_at =>
> prev_starts_at, :ends_at => prev_ends_at)
>
> cal = %(<table class="#{options[:table_class]}">\n)
> cal << %(\t<thead>\n\t\t<tr>\n)
> cal << %(\t\t\t<th>#{dates.first.strftime("%Y")}</th>\n)
> dates.each do |d|
> cal << "\t\t\t<th#{Date.today == d ? " class='today'" :
> ""}>#{d.strftime("%A")}<br />#{d.strftime("%m/%d")}</th>\n"
> end
> cal << "\t\t</tr>\n\t</thead>\n\t<tbody>\n"
> time_range.each do |hour|
> minutes = 0
> print_hour = hour.to_s.rjust(2, '0')
> 4.times do |i|
> print_minutes = minutes.to_s.rjust(2, '0')
> cal << %(\t\t<tr class='m#{print_minutes} d#{duration}'>\n)
> if hour < 12
> cal << %(\t\t\t<th rowspan="4"><h3>#{hour}</h3>AM</th>\n)
> if i==0
> end
> if hour == 12
> cal << %(\t\t\t<th rowspan="4"><h3>#{hour}</h3>PM</th>\n)
> if i==0
> end
> if hour > 12
> hour = hour - 12
> cal << %(\t\t\t<th rowspan="4"><h3>#{hour}</h3>PM</th>\n)
> if i==0
> end
>
> options[:starts_at].upto(options[:ends_at]) do |d|
> the_minutes = minutes
> print_start_minutes = the_minutes.to_s.ljust(2, '0')
> starts_attime_string = %
> (#{d.to_s(:db)}T#{print_hour}:#{print_start_minutes}:00-06:00)
> starts_attime =
> DateTime.parse(starts_attime_string).to_datetime
> ends_attime = (starts_attime +
> duration.minutes).to_datetime
> range = (starts_attime...ends_attime)
>
> # cell_attrs should return a hash.
> cell_text, cell_attrs = block.call(range)
> cell_text ||= ""
> cell_attrs ||= {}
> cell_attrs[:class] = cell_attrs[:class].to_s + " today" if
> Date.today == d
> cell_attrs = cell_attrs.map {|k, v| %
> (#{k}="#{v}") }.join(" ")
>
> cal << "\t\t\t<td #{cell_attrs}>\n#{cell_text} \t\t
> \t</td>\n"
> end
> minutes += duration
> cal << %(\t\t</tr>)
> end
> end
> cal << "\n\t</tbody>\n</table>\n"
> cal << "<br/>\n"
> cal << next_link
> cal << prev_link
>
> end
>
> private
> end
>
> On Oct 3, 10:08 am, Bobnation <[EMAIL PROTECTED]> wrote:
>
> > I'd love to read it. Looking forward to it.
>
> > On Oct 3, 1:22 am, infinteVerve <[EMAIL PROTECTED]> wrote:
>
> > > Nevermind, Just fixed it.
> > > I will post the solution tomorrow, for anyone else tackling similar
> > > issues.
>
> > > On Oct 2, 11:34 pm, infinteVerve <[EMAIL PROTECTED]> wrote:
>
> > > > issue #1. I'm a newb.
>
> > > > So, I'm trying to set up a calendar of lessons using the
> > > > WeekViewHelper snippet found
> > > > here:http://snippets.dzone.com/posts/show/5206(veryslightlyaltered). The
> > > > problem only occurs when I try to set the :url option. Without it
> > > > works fine, except I haven't been able to (can't figure it out) create
> > > > links to go to the next or previous weeks.
>
> > > > Any help, or suggestions are greatly appreciated, or if you know of a
> > > > different way to go about it.
>
> > > > The code for the various files are posted below. "start_date" and
> > > > "end_date" are columns in the table "lessons", while "starts_at" and
> > > > "ends_at" are options for the helper.
>
> > > > WEEK_VIEW_HELPER.RB:
>
> > > > require 'date'
>
> > > > # Author: Josh Adams
> > > > # This helper is based on CalendarHelper.
> > > > # WeekViewHelper allows you to draw a databound week view calendar
> > > > with fine-grained CSS formatting
> > > > module WeekViewHelper
> > > > VERSION = '0.0.1'
>
> > > > # Returns an HTML week-view calendar. In its simplest form, this
> > > > method generates a plain
> > > > # calendar (which can then be customized using CSS) for a given
> > > > span of days.
> > > > # However, this may be
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" 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/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---