I was working on a Custom CMS developed by myself in Ruby on Rails. I wanted to use short codes to display the images into my pages. I am posting this part of my work here, which I posted in medium a year ago.
I was able to detect the short codes saved in db and convert into respective gallery. Its very easy and simple to do.
Create shortcodes of Gallery
Create a short codes of each gallery items like [media slug=โgalleryโ], each gallery has unique slug and are associated with the images or media uploads of any types. You can implement any of our own methods on creating gallery.
Add a helper to detect shortcode and display gallery.
I added a page_helper to detect the shortcode and convert the shortcode into the responsive gallery.
module PagesHelper def render_media_gallery(content) content.to_s.gsub(/\[media slug="([^"]+)"\]/) do |match| slug = $1 uploads = MediaLibrary.friendly.find(slug).uploads if uploads.any? links = uploads.map do |upload| content_tag(:div, link_to(image_tag(upload.file, class: "img-responsive img-responsive-1x1 rounded border"), rails_blob_path(upload.file, disposition: "attachment")), class: "col") end.join("\n").html_safe content_tag(:div, links, class: "row row-cols-6 g-3", "data-controller": "lightbox") else "Media not found for slug: #{slug}" end end.html_safe end end
For references, following are the models used to create a media manager with the power of Rails and StimulusController.
class MediaLibrary < ApplicationRecord has_many :uploads extend FriendlyId friendly_id :slug_candidates, use: :slugged def slug_candidates [:name] + Array.new(6) {|index| [:name, index+2]} end def should_generate_new_friendly_id? #will change the slug if the name changed name_changed? || super end end
class Upload < ApplicationRecord belongs_to :media_library, optional: true has_one_attached :file, dependent: :destroy end
Thank you! Happy Coding.
Top comments (0)