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(very slightly altered). 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 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
>
>       if options[:url]
>        next_starts_at = options[:ends_at] + 1
>        next_ends_at   = next_starts_at + 7
>        next_link = link_to('>>',
> url_for(options[:url].merge({options[:starts_at] => next_starts_at,
> options[:ends_at] => next_ends_at})) + options[:url_append])
>        prev_starts_at = options[:starts_at] - span
>        prev_ends_at = options[:starts_at] - 1
>        #prev_link = link_to('<<',
> url_for(options[:url].merge(:starts_at => prev_starts_at, :ends_at =>
> prev_ends_at)) + options[:url_append])
>      end
>
>         #next_starts_at = options[:ends_at] + 1
>         #next_ends_at   = next_starts_at + 5
>         [EMAIL PROTECTED] = options[:starts_at] = next_starts_at
>         [EMAIL PROTECTED] = options[:ends_at] = next_ends_at
>         #redirect_to 'index'
>
>         #next_link = link_to('>>',
> url_for(options[:url].merge(:starts_at => next_starts_at, :ends_at =>
> next_ends_at)) + options[:url_append])
>
>       # TODO Use some kind of builder instead of straight HTML
>
>       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}&nbsp;\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 << %(#{hour})
>
>     end
>
>     private
>  end
>
> WKLY_CAL_CONTROLLER.RB:
> class WklyCalController < ApplicationController
>
>   def index
>     @lessons = Lesson.find(:all)
>   end
> end
>
> INDEX.HTML.ERB (WKLY_CAL)
> <h1>Weekly Calendar</h1>
> <% for lesson in @lessons %><%end%>
> <%= week_view  :starts_at => (Date.today - 2), :ends_at => (Date.today
> + 2), :url => wkly_cal_path 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
>  -%>
>
> (IN ROUTES.RB):
> map.wkly_cal '', :controller => 'wkly_cal', :action => 'index'
--~--~---------~--~----~------------~-------~--~----~
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 rubyonrails-talk@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to