Taking control of your app with a self-hosted installation sounds like a good plan for security and speed, right? It could be that your CMS app has TinyMCE included as a self-hosted dependency, and you want to add some of our premium plugins. Or, maybe you’re looking for extra control with a self-hosted deployment of TinyMCE and want to try out our premium plugins before committing to a paid plan.
Either way, a hybrid approach is exactly what you need to fit this use case within your CMS.
In a hybrid-hosting setup, Self-Hosted Tiny and Tiny Cloud work together. This article explains how that works for CMS developers, and getting started using a CMS app, with TinyMCE as your CMS WYSIWYG.
To help you hit the ground running, we’ve come up with a starter config specifically for CMSs, that contains all of the features your users will love.
CMS set up prerequisites
To leverage Cloud premium plugins, you’ll need an API key. You can either sign up for an API Key through our free Core plan or sign up for one of our premium plans (both come with a 14 day free trial of premium plugins). When using Tiny Cloud, adding your API key prevents the editor changing to read-only mode.
Get your API key:
- Check on the pricing plans for TinyMCE, and select your desired plan
- Or navigate directly to the sign up page to get your FREE API key
The CMS config:
-
Check on the CMS starter config for TinyMCE to find the code snippet you need to get started
Finding your FREE API key
Once logged in to your TinyMCE account, look at the top section as the page loads. The API key shown here gives you 14 days FREE access to TinyMCE premium plugins. It activates when you use the key in your editor, and load it into a browser with premium plugins configured in the tiny.init script.
Create a demo CMS
These instructions show how to make a demo that mimics the UI of a CMS and includes TinyMCE Cloud + Self-hosted premium plugins. You can adapt these instructions to add TinyMCE to your existing or new CMS.
Check on the video tutorial for a summary of how to set up TInyMCE for your CMS:
The video transcript:
To make a demo CMS, the following HTML and CSS code provides a setup for a CMS app.
-
Set up a folder inside your workstation environment, and include an index.html file inside it.
-
Copy the following CMS demo HTML into your index file. The CMS content is drawn from the TinyMCE CMS demo avaiable on the solutions page:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>
tinymce.init({
selector: 'textarea',
});
</script>
</head>
<body>
<h1>TinyMCE CMS Starter Config</h1>
<form method="post">
<textarea>
<h1>Heading Level 1</h1>
</textarea>
</form>
</body>
</html>
-
Add more content to customize the TinyMCE init script for a CMS:
<script>
tinymce.init({
selector: 'textarea',
plugins: 'a11ychecker advcode advlist advtable anchor autocorrect autosave editimage image link linkchecker lists media mediaembed pageembed powerpaste searchreplace table template tinymcespellchecker visualblocks wordcount',
toolbar: 'undo redo | styles | bold italic underline strikethrough | align | table link image media pageembed | bullist numlist outdent indent | spellcheckdialog a11ycheck code',
a11ychecker_level: 'aaa',
style_formats: [
{title: 'Heading 1', block: 'h1'},
{title: 'Heading 2', block: 'h2'},
{title: 'Paragraph', block: 'p'},
{title: 'Blockquote', block: 'blockquote'},
{title: 'Image formats'},
{title: 'Medium', selector: 'img', classes: 'medium'},
],
object_resizing: false,
valid_classes: {
'img': 'medium',
'div': 'related-content'
},
image_caption: true,
templates: [
{
title: 'Related content',
description: 'This template inserts a related content block',
content: '<div class="related-content"><h3>Related content</h3><p><strong>{$rel_lede}</strong> {$rel_body}</p></div>'
}
],
template_replace_values: {
rel_lede: 'Lorem ipsum',
rel_body: 'dolor sit amet...',
},
template_preview_replace_values: {
rel_lede: 'Lorem ipsum',
rel_body: 'dolor sit amet...',
},
noneditable_class: 'related-content',
content_langs: [
{title: 'English (US)', code: 'en_US'},
{title: 'French', code: 'fr'}
],
height: 540,
});
</script>
Download and configure the TinyMCE Self-Hosting file
- Navigate to the TinyMCE get Tiny page, and click on the Download TinyMCE SDK Now button
- When the Download is finished, unzip the .zip file, and move it into the same directory as your demo CMS
- Reference TinyMCE with a script tag, specifying the source of the TinyMCE Self-Host folder you unzipped and added to your project:
<script src="tinymce/js/tinymce/tinymce.min.js"></script>
Configure the CDN link and API key
-
Add a script tag to your app inside the head tags
-
Place a reference to the TinyMCE Content Delivery Network (CDN) within the script and add your API key:
<script src="https://cdn.tiny.cloud/1/api-key-goes-here/tinymce/6/plugins.min.js" referrerpolicy="origin"></script>
-
Save the changes
Note: If you’re not developing on localhost, you’ll need to whitelist your domain inside your Tiny.cloud account screen
Configure the Textarea and CMS style
-
Create more HTML content for the page, including the expansion of the textarea:
<textarea>
<h1>Heading Level 1</h1>
<p><strong><img style="float: right;" src="https://images.pexels.com/photos/1559825/pexels-photo-1559825.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260" alt="Town" width="300" height="375">Pellentesque habitant morbi tristique </strong>senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em></p>
<p>Mauris placerat eleifend leo.</p>
<p>Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi.</p>
<p>Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
<p>Donec pharetra purus eu eros dignissim dignissim. Donec consectetur, felis eu malesuada ultricies, felis ligula auctor diam, nec rhoncus massa leo vel massa.</p>
<table style="border-collapse: collapse; width: 100%;" border="1">
<thead>
<tr>
<td style="width: 31.7887%;"> </td>
<td style="width: 31.7887%;"><strong>Location</strong></td>
<td style="width: 31.7896%;"><strong>Activity</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 31.7887%;"><strong>Day 1</strong></td>
<td style="width: 31.7887%;">Dolor</td>
<td style="width: 31.7896%;">Tellus est malesuada </td>
</tr>
<tr>
<td style="width: 31.7887%;"><strong>Day 2</strong></td>
<td style="width: 31.7887%;">Eleifend</td>
<td style="width: 31.7896%;">Vivamus pretium ornare est</td>
</tr>
<tr>
<td style="width: 31.7887%;"><strong>Day 3</strong></td>
<td style="width: 31.7887%;">Semper</td>
<td style="width: 31.7896%;">Amet, consectetuer adipiscing</td>
</tr>
</tbody>
</table>
<h2>Heading Level 2</h2>
<ol>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ol>
<blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p>
</blockquote>
<h3>Heading Level 3</h3>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ul>
</textarea>
-
Adjust the TinyMCE script with the following content_css:
content_style: `
img {
height: auto;
margin: auto;
padding: 10px;
display: block;
}
img.medium {
max-width: 25%;
}
`;
-
Save the changes, and load the demo in your browser:
Need more CMS information?
Head over to our CMS editor page to see another demo in action, and to find the CMS starter config used in this article. It’s available with and without comments in the HTML to explain what each aspect of TinyMCE is doing.
Remember that when signing up for a FREE rich text editor API key, once you add the key to your app and start running Premium plugins, you have access to the functionality for 14 days before you need to consider using the Core plan without premium plugins, or signing up for one of the TinyMCE Paid plans.
And, while you’re in your 14-day free trial period (or after you’ve signed up for a paid plan), you can contact support if you have any questions on adding TinyMCE to your CMS.