2014-01-12 4 views
1

Alchemy CMS 페이지에서 동적 컨텐츠 (오퍼 검색 결과)를 렌더링해야합니다.CMS 페이지에서 동적 컨텐츠 렌더링

처음에는 cms-backend에서 "searchresult"라는 페이지를 만들었습니다.

에센스가없는 요소를 만들었습니다. 테이블을 렌더링해야합니다.

seachform 행동 /searchresult으로 가지고 있으며, 페이지는 (수) - 검색 PARAMS로 호출됩니다

/searchresult?utf8=✓&searchmaingroup=bb&searchprofgroup=4100 

그러나이 어디 이것에 대한 데이터를 수집 할 수 있습니다?

나는 구성 옵션 "컨트롤러"와 자신의 컨트롤러

- name: offersearch 
    elements: [header, resulttable] 
    autogenerate: [header, resulttable] 
    controller: offers 
    action: index 
    cache: false 

컨트롤러에 "행동"과 page_layout 시도 :

OffersController < Alchemy::BaseController 
    def index 

    end 
end 

을하지만이 컨트롤러와 여전히 리디렉션한다 searchparams가 손실됩니다.

@offers = Offer.where(...) 

와 CMS의 페이지 요소 (보기 - 부분)

I이 걸릴 :

나는 searchparams을 잡아 같은 변수를 채울 수 연금술 CMS에있는 "후크"거기 여기에 해결책을 찾으려고했습니다. Creating a custom Guestbook Module for Alchemy CMS

하지만 불행히도 나를 위해 충분하지 않습니다. (내 CMS 백엔드의 맞춤 오퍼 모듈이 정상적으로 작동합니다.)

답변

0

여기 내 해결책이 있습니다.

몰라, 이것은 올바른 방법 인 경우 -하지만 컨트롤러 # 액션에 페이지 이름에 대한 :-)

토 경로를 작동합니다

get '/searchresult' => 'offers#handlesearch', :as => :searchresult 

컨트롤러 :

컨트롤러가 Alchemy :: PagesController에서 상속 받고 Alchemy :: PagesHelper를 사용합니다.

그런 다음 [: urlname] 매개 변수를 요청 된 경로에 놓습니다. 따라서 컨트롤러는 올바른 페이지 설명을로드 할 수 있습니다. 나머지는 연금술 마법에 의해 처리됩니다.

class OffersController < Alchemy::PagesController 

    helper Alchemy::PagesHelper 

    def handlesearch 

    params[:urlname] = request.path_info.gsub('/', '') 
    @page ||= load_page 

    if [email protected]? 
     @offers = Offer.where(fb: params[:searchprofgroup]) 
    else 
     render_404 
    end 

    end 

end 

마지막으로보기 :

#/app/views/offers/handlesearch.html.erb 
<%= render_page_layout %> 

그게 전부 보조 노트로

2

에게 : 당신은 연금술 - 흰 족제비 보석 봤어? (구형 Alchemy 버전에서는 빌드 기능을 포함하고 있습니다.) 모든 EssenceTextEssenceRichtext을 검색합니다 (특정 에센스로 전환하지 않는 경우).

경로에서 이름을 설정 한 것처럼 페이지 URL 이름에 의존하지 않는 편이 좋습니다. 다른 내용 편집기가 해당 페이지의 이름을 쉽게 바꿀 수 있거나 잘못된 이름으로 다른 언어 트리에서 이름을 쉽게 만들 수 있기 때문입니다.

대신 검색 결과에만 사용되는 page_layout을 정의합니다.

# config/alchemy/page_layouts.yml 
- name: searchresults 
    elements: [offer_searchresults] 
    unique: true 
    cache: false 

그럼 당신은 당신의 검색 처리 방법으로 기존의 Alchemy::Page 클래스를 확장 할 수 있습니다

# app/controllers/alchemy/pages_controller_ext.rb 
module Alchemy 
    PagesController.class_eval do 

    before_filter :set_searchresult_page, :only => :show 
    before_filter :perform_search, :only => :show 

    def perform_search 
     if params[:searchprofgroup].present? && @search_result_page 
     @offers = Offer.where(fb: params[:searchprofgroup]) 
     end 
    end 

    private 

    def set_searchresult_page 
    @search_result_page = Page.published.where(page_layout: "searchresults").first 
    end 

    end 
end 

을 그리고 당신이해야 할 마지막 일은 이러한 확장을 사용해야 레일을 알리는 것입니다

# config/application.rb 
config.to_prepare do 
    Dir.glob(Rails.root.join("app/**/*_ext*.rb")) do |c| 
    Rails.configuration.cache_classes ? require(c) : load(c) 
    end 
end