Sayfa.ContentTypes.Base (Sayfa v0.5.0)

Copy Markdown View Source

Base macro for content types.

Reduces content type definitions from ~25 lines of boilerplate to ~3 lines. All five built-in types (article, note, page, project, talk) use this macro.

Options

  • :name — atom identifier (required)
  • :directory — content subdirectory (default: "<name>s")
  • :url_prefix — URL path prefix (default: directory)
  • :layout — default layout name (default: to_string(name))
  • :required_fields — front matter requirements (default: [:title, :date])

Examples

defmodule MyApp.ContentTypes.Recipe do
  use Sayfa.ContentTypes.Base, name: :recipe
end

defmodule MyApp.ContentTypes.Page do
  use Sayfa.ContentTypes.Base,
    name: :page,
    url_prefix: "",
    required_fields: [:title]
end