The World's Most Flexible E-Commerce Platform meets The World's Most Flexible Content Management System!
This gem is a Alchemy CMS and Solidus connector.
- It provides tabs in Alchemy and Solidus menus to easily switch between both backends
- It offers two new Essences for Alchemy called
EssenceSpreeProduct
andEssenceSpreeTaxon
that 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 1.0 and above.
This version runs with Alchemy 3.2 and above.
Add this line to your application's Gemfile:
gem 'alchemy-solidus', github: 'AlchemyCMS/alchemy-solidus', branch: 'master'
Install the gem with:
$ bundle install
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_user
If 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', '~> 3.2'
and install it:
$ bundle install
$ bundle exec rails g alchemy:devise:install
Run the Solidus installer:
NOTE: Skip this if you already have a running Solidus installation.
$ bundle exec rails g spree:install
Then run the solidus custom user generator:
$ bundle exec rails g spree:custom_user Alchemy::User
Now 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 spree 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:migrations
Run the installer of Alchemy
$ bundle exec rake alchemy:install
and follow the on screen instructions.
If you plan to render the Alchemy site in the Solidus layout add the following to your initializer:
# config/initializers/alchemy.rb
require 'alchemy/solidus/use_solidus_layout'
If you plan to render Alchemy content in your Solidus views (ie. a global header or footer section), you need to include the Alchemy view helpers and language store in your Solidus controllers with the following addition to your initializer:
# config/initializers/alchemy.rb
require 'alchemy/solidus/alchemy_in_solidus'
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#show'
mount Spree::Core::Engine => '/'
# Must be last so it's catch-all route can render undefined paths
mount Alchemy::Engine => '/'
# config/alchemy/elements.yml
- name: product
contents:
- name: spree_product
type: EssenceSpreeProduct
- name: product_category
contents:
- name: spree_taxon
type: EssenceSpreeTaxon
$ rails g alchemy:elements --skip
# config/alchemy/page_layouts.yml
- name: product
elements: [product]
- name: products
elements: [product_category]
# app/views/alchemy/elements/_product_view.html.erb
<%= element.ingredient('spree_product') %>
# app/views/alchemy/elements/_product_category_view.html.erb
<%= element.ingredient('spree_taxon') %>
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