Development and maintenance is sponsored by Blish.
This is a AlchemyCMS and Solidus integration gem.
- It provides tabs in Alchemy and Solidus menus to easily switch between both backends
- It offers two new Essences for Alchemy called
EssenceSpreeProductandEssenceSpreeTaxonthat you can use to place Spree products and/or Taxons on your pages. - Shares admin sessions and user abilities between Alchemy and Solidus.
This version runs with Solidus v4.0 and up.
- For a Solidus 3.x compatible version please use the
6.3-stablebranch or6.3.1gem version. - For a Solidus < 2.11 compatible version please use the
3.1-stablebranch or3.3.0gem version. - For a Solidus < 2.6 compatible version please use the
2.3-stablebranch or2.3.2gem version. - For a Solidus 1.x compatible version please use the
1.0-stablebranch or1.1.0gem version.
NOTE: If you are using Solidus v3.0 with Alchemy v5.3, make sure to also use Rails v6.0 and the legacy image attachment adapter (paperclip) and not the active storage adapter, since this needs Rails >= 6.1 and Alchemy v5.3 is not Rails 6.1 compatible. You need Alchemy v6.0 for Rails >= 6.1.
This version runs with Alchemy v7.2
- For a Alchemy 7.0/7.1 compatible version please use the
7.2-stablebranch or7.2gem version. - For a Alchemy 6.x compatible version please use the
5.0-stablebranch or5.0gem version. - For a Alchemy 5.x compatible version please use the
4.1-stablebranch or4.1gem version. - For a Alchemy 4.x compatible version please use the
3.1-stablebranch or3.3gem version. - For a Alchemy 4.0 compatible version please use the
2.3-stablebranch or2.3gem version. - For a Alchemy 3.x compatible version please use the
1.0-stablebranch or1.1gem version.
Add this line to your applications Gemfile:
gem 'alchemy-solidus', '~> 7.0'Install the gem with:
$ bundle installRecommended
We ship a Rails generator that helps you to install this gem into your existing application.
$ bin/rails g alchemy:solidus:installThere are several options available, please check them with
$ bin/rails g alchemy:solidus:install --helpTo upgrade update the Gemfile and run the install generator again
$ bin/rails g alchemy:solidus:installNOTE Please make sure to remove the Alchemy::Modules.register_module part from your config/initializer/alchemy.rb file if upgrading from 2.5.
For regular setups we recommend the automated installer mentioned above. But if you know what you are doing and want to have full control over the integration you can also set this up manually.
Both Alchemy and Solidus come without an authentication system in place. You will need to choose an authentication system yourself. There are 3 available options. Whichever you choose, you need to instruct Solidus & Alchemy about your choice of authentication system.
Here are the steps for each option:
1. Option: Use Solidus Auth Devise
Recommended for:
- An existing Solidus installation (
gem 'solidus_auth_devise'should already be in your Gemfile). - You are just adding Alchemy
To use Solidus Auth Devise, instruct Alchemy to use the Spree::User class:
# config/initializers/alchemy.rb
Alchemy.user_class_name = 'Spree::User'
Alchemy.current_user_method = :spree_current_userIf you put Spree in it's own routing namespace (see below) you will want to let Alchemy know these paths:
# config/initializers/alchemy.rb
Alchemy.login_path = '/store/login'
Alchemy.logout_path = '/store/logout'2. Option: Use Alchemy Devise
Recommended for:
- An existing Alchemy installation
- You don't have an authentication system and don't want to role an authentication system on your own.
Add alchemy-devise to your Gemfile
# Gemfile
gem 'alchemy-devise', '~> 4.1'and install it:
$ bundle install
$ bundle exec rails g alchemy:devise:installRun the Solidus installer:
NOTE: Skip this if you already have a running Solidus installation.
$ bundle exec rails g spree:installThen run the solidus custom user generator:
$ bundle exec rails g spree:custom_user Alchemy::UserNow you'll need to instruct Solidus to use the Alchemy User class:
# config/initializers/spree.rb
...
Spree.user_class = "Alchemy::User"
...and tell Solidus about Alchemy's path helpers:
# lib/spree/authentication_helpers.rb
...
def spree_login_path
Alchemy.login_path
end
def spree_signup_path
Alchemy.signup_path
end
def spree_logout_path
Alchemy.logout_path
end
...Please follow the Solidus custom authentication and the Alchemy custom authentication guides in order to integrate your custom user with Solidus and Alchemy.
Install the migrations
$ bundle exec rake alchemy_solidus:install:migrationsRun the installer of Alchemy
$ bundle exec rake alchemy:installand follow the on screen instructions.
For routing you have a few options.
# config/routes.rb
mount Spree::Core::Engine => '/store'
mount Alchemy::Engine => '/pages'# config/routes.rb
mount Alchemy::Engine => '/pages'
mount Spree::Core::Engine => '/'# config/routes.rb
mount Spree::Core::Engine => '/store'
mount Alchemy::Engine => '/'# config/routes.rb
# Make Alchemy's root page have higher priority than Spree's root page
root to: 'alchemy/pages#index'
mount Spree::Core::Engine => '/'
# Must be last so it's catch-all route can render undefined paths
mount Alchemy::Engine => '/'Please make yourself familiar with AlchemyCMS by reading the guidelines
# config/alchemy/elements.yml
- name: product
ingredients:
- role: spree_product
type: SpreeProduct
- name: product_category
ingredients:
- role: spree_taxon
type: SpreeTaxon$ rails g alchemy:elements --skip# config/alchemy/page_layouts.yml
- name: product
elements: [product]
- name: products
elements: [product_category]You can mix Alchemy and Solidus content in the same view.
<!-- app/views/alchemy/elements/_product_view.html.erb -->
<% cache element do %>
<%= element_view_for element do |el| %>
<% product = el.value(:spree_product) %>
<h1><%= product.name %></h1>
<p><%= product.description %></p>
<%= el.render :text %>
<%= el.render :image %>
<% end %>
<% end %>Or for a list of taxon products
<!-- app/views/alchemy/elements/_product_category_view.html.erb -->
<% cache element do %>
<%= element_view_for element do |el| %>
<h2><%= el.render :headline %></h2>
<%= el.render :description %>
<% taxon = el.value(:spree_taxon) %>
<% taxon.products.each do |product| %>
<%= link_to product.name, spree.product_path(product) %>
<% end %>
<% end %>
<% end %>Alchemy ❤️ Solidus!
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Added some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request