كيف يمكنك تقديم قالب داخل تخطيط باستخدام لغة القالب السائل؟

StackOverflow https://stackoverflow.com/questions/1283083

  •  16-09-2019
  •  | 
  •  

سؤال

أحاول تقديم قالب سائل داخل تخطيط سائل (قالب سائل Lang، وليس السخافات السائلة CSS). لا أستطيع أن أحصل على جزء التخطيط لتقديمه. تستخدم حاليا:

assigns = {'page_name' => 'test'}
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read)
@template = Liquid::Template.parse(File.new(self.template.path).read)

@rend_temp = @template.render(assigns)
@rend_layout = @layout.render({'content_for_layout' => @rend_temp})

render :text => @rend_layout, :content_type => :html

تظهر HTML الناتجة من الصفحة أن "القالب" الذي تم تقديمه في سائل بخير، ولكنه غير ملفوف بالتخطيط (استبدال "Content_For_Layout" في التخطيط مع القالب المقدم)

هل كانت مفيدة؟

المحلول

فقط للسماح لأي شخص آخر يعرف من يأتي عبر هذه المشكلة، فإن الرمز المنشور أعلاه يعمل بالفعل، المشكلة مع المتغير المسمى Template. قمت بإعادة تسميته Template، و Layout to @ @ @ @ _layout وكل شيء يعمل كما هو متوقع.

نصائح أخرى

لاستخدام السائل في Ruby على القضبان (خاصة القضبان 3) - أعتقد أن الطريقة المناسبة لتقديم قوالب السائل الخاصة بك (وأيضا الحفاظ على جميع قضبان العمل تفعل لك) كما يلي ...

يوفر GEM Liquid نفسه سائلا للسكوار حتى تتمكن من تشغيل القضبان للبحث عن قوالب "سائلة" عند الاتصال ب # Render. يعمل هذا السائل_View فقط مع القضبان 2.3 ولكن يمكن بسهولة تحديثه للعمل مع القضبان 3 عن طريق إجراء التحديث التالي

if content_for_layout = @view.instance_variable_get("@content_for_layout")
  assigns['content_for_layout'] = content_for_layout
elsif @view.content_for?(:layout)
  assigns["content_for_layout"] = @view.content_for(:layout)
end
assigns.merge!(local_assigns.stringify_keys)

هذا يمكن رؤيته هنا -> https://github.com/danshultz/liquid/commit/E27B5FCD174F4B3916A73B9866E44AC0A012B182.

ثم لتقديم عرض السائل الخاص بك بشكل صحيح فقط اتصل

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop }

في تطبيقنا، نظرا لعدم وجود حفنة من سمات السائلة المشتركة، فقد تجاوزت طريقة "التجسيد" في وحدة تحكم الأساس لدينا تلقائيا السكان المحليين الافتراضيين تلقائيا عن طريق الرجوع إلى #Liquid_View_Assigns التي تنشأ بالإضافة إلى ذلك بإضافة قطرات سائلة إضافية لاستدعاء المكالمة

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top