In this find_by_url method, you return the PersonPage if the URL is 
/people/18, but you don't call its find_by_url if the URL is 
/people/18/bio.  Remove the $ from the regexp and then instead of 
returning children.find_by_class_name('PersonPage'), return 
children.find_by_class_name('PersonPage').find_by_url(url, live, 
clean).  Then in your PersonPage, have several tests -- one that matches 
for itself (use the one below and substitute parent.url for self.url), 
and then any special cases (/bio, /contact, etc) that return the 
appropriate sub-page, then super.

If this is unclear, write me back and I'll give more detail.

Sean

nn wrote:
> On Jan 29, 2008 9:42 PM, Sean Cribbs <[EMAIL PROTECTED]> wrote:
>
>   
>> It seems it might be appropriate for your PersonPage to be virtual and
>> the PeoplePage to override find_by_url as well.
>>     
>
>
> Hi Sean,
>
> Thanks for the reply. Both of the PersonPage and the BioPage are virtual,
> and in PeoplePage I have:
>
>   def find_by_url(url, live = true, clean = false)
>     url = clean_url(url) if clean
>     if url =~ %r{#{self.url}/?\d+/?$}
>       children.find_by_class_name 'PersonPage'
>     else
>       super
>     end
>   end
>
>   def child_url(child)
>     clean_url "#{url}/#{child.id}"
>   end
>
> I can get the pages by Page.find_by_url for the
>
> /people/
> /people/18
>
> but it doesn't work for
>
> /people/18/bio
>
> Its a wildest guess, but does it have anything to do with the fact that I'm
> redefining find_by_url in a virtual page (per se)? I'd say no, but just to
> be on the safe side...
>
>
> nn wrote:
>   
>> I have the following setup:
>>
>> Home Page
>>   |
>>   -- People (PeoplePage)
>>        |
>>        -- Person (PersonPage)
>>             |
>>             -- Bio (BioPage)
>>             -- Contact (ContactInfoPage)
>>
>> I made an extension with some Page Types (in parentheses) wich are used to
>> display the list of people in the company and the data about a particular
>> person, respectively (the latter being a virtual page).
>>
>> Since a person object carries plenty of data I need to split the data into
>> several pages, like:
>>
>> /people/18                       # 18 is an ID of a existing object
>>     
> (Person)
>   
>> /people/18/bio
>> /people/18/contact
>> ...
>>
>> It seems I have a problem with find_by_url in PersonPage:
>>
>>   def virtual?
>>     true
>>   end
>>
>>   def find_by_url(url, live = true, clean = true)
>>     url = clean_url(url) if clean
>>     if url =~ %r{#{parent.url}/\d+/bio/?$}
>>       children.find_by_class_name 'BioPage'
>>     else
>>       super
>>     end
>>   end
>>
>> This looks fine to my untrained eye, but:
>>
>> $ script/console
>> Loading development environment.
>>
>>     
>>>> p = Page.find_by_url('/people/18/bio/')
>>>>
>>>>         
>> => #<FileNotFoundPage:0xb709db54 @attributes={"virtual"=>"1",
>> "class_name"=>"FileNotFoundPage", "slug"=>"file-not-found",
>> "updated_at"=>"2008-01-24 00:47:14", "title"=>"File Not Found",
>> "created_by"=>"1", "breadcrumb"=>"File Not Found", "lock_version"=>"2",
>> "updated_by"=>"1", "id"=>"3", "published_at"=>"2008-01-20 23:51:27",
>> "status_id"=>"100", "layout_id"=>nil, "parent_id"=>"2",
>> "created_at"=>"2008-01-20 22:51:27"}>
>>
>> Then, this works in the same console:
>>
>>   p = Page.find_by_url('/people/18/')
>>   p.children.find_by_class_name 'BioPage'
>>
>> Regexp looks fine too, as far as I can tell. I know this is a cockpit
>> problem, but I need someone to point a finger at it, since I must be
>>     
> (code)
>   
>> blind or something. BioPage is declared virtual, too (if it matters). Can
>> anyone suggest what could be wrong?
>>     
>
>   
>>> _______________________________________________
>>> 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

Reply via email to