Boo! 15% off your first payment on every paid plan. The donkey isn’t scared, but the prices are → ends 1 November, 23:59

Frame Setup

FREEPROBUSINESSWHITE-LABEL

Your blog should look like part of your website: the same menu at the top, the same footer at the bottom. Frame Setup reads your homepage, finds the menu and footer, and copies them onto your blog.

Open it in your admin panel: Settings → Frame Tools, then Open under Frame Setup. On the Pro plan and above the same page is called Frame Tools Plus.

Warning: Before you change anything, keep a copy of your website's pages. In your hosting's File Manager, download each page you will edit (for example index.html) to your computer. If a page breaks, upload the copy back and nothing is lost. DonkeyCMS backups cover your blog, not your website's own pages.

Paste your homepage address, or press Choose File and upload one of your site's pages if your site is not online yet. Then press Detect Header/Footer.

Nothing changes yet: you check everything before it is saved.

Frame Setup, step 1: a box for your homepage address, a Choose File button and the Detect Header/Footer button.123
  1. Paste your homepage address here.
  2. Or upload one of your site's pages instead.
  3. Then press Detect Header/Footer.

Step 2: Check and save

Frame Setup shows what it found, each with its code and a live preview: your Header (the menu at the top) and your Footer. If your site has a separate menu for phones, it appears as a third box, Mobile Menu.

Frame Setup, step 2: the header and footer found on a sample bakery site, each with its code and a live preview.1234
  1. Your menu, as it will look on the blog.
  2. Your footer.
  3. How your menu behaves on blog pages: background, room under a fixed menu, and a Blog link.
  4. When both look right, press Write to header.php / footer.php.

Under the two boxes, Your menu on blog pages fixes what often looks wrong when a homepage menu is used on a blog page. Frame Setup looks at your website's styles and switches on what your menu needs; the preview shows the result before anything is saved.

  • Menu background. On your homepage the menu may be see-through, over a big photo. A blog page has no photo behind it, so the menu can be invisible. Choose Your website's solid menu (your site's own look once a visitor scrolls, offered when your site has one) or Your own colors.
  • Leave room for the menu. A menu that stays fixed at the top can cover the first lines of a post. With this on, blog pages start below it.
  • Add a Blog link to the menu. Adds "Blog" as the last menu item, so visitors can reach your blog from your website.
Your menu on blog pages: see-through and fixed menus found, the solid menu chosen, room and Blog link switches on.1234
  1. What Frame Setup found in your website's styles.
  2. The menu's background on blog pages. Your site's own solid look is chosen for you when it has one.
  3. Blog pages start below a fixed menu, not behind it.
  4. Adds Blog as the last item of your menu.

These choices change blog pages only; your website's own pages keep their look. You can change them later in Frame Studio.

Frame Setup also points out two more things:

  • Links like #about that only work on your homepage. Enter your homepage's path and press Rewrite these links to turn them into links that work from any page.
  • Your logo inside a main heading (<h1>). Every post already has a main heading: its title. Change <h1 to <div and </h1> to </div> in the Header box before saving.

Tip: These are advice, not errors. You can save anyway and change them later in Frame Studio.

When everything looks right, press Write to header.php / footer.php. Your blog now shows your menu and footer.

Step 3: Add them to your pages

Frame Setup then shows two short lines, one for the menu and one for the footer. Put them in your website's own pages, so your site and your blog share one menu: change it once and it changes everywhere.

Frame Setup reads the page you gave it and tells you exactly which lines to replace, for example In index.html, delete lines 15 to 28. The lines to delete are red; the lines around them stay and are gray.

Frame Setup, step 3: the exact lines to delete in index.html, in red, and the menu and footer lines to put in their place.123
  1. The exact lines of your menu to delete, in red. Gray lines stay.
  2. Copy the line that takes their place.
  3. The same for your footer.

If it can't be completely sure where a block starts and ends, it shows how your menu begins instead of line numbers. Then use the example below to find the whole block.

If your blog is in the usual blog folder, these are the two lines. You don't need to understand them; copy them as they are, or use the Copy buttons in Frame Setup, which always show the right lines for your site.

The menu line:

<?php include $_SERVER['DOCUMENT_ROOT'] . '/blog/header.php'; ?>

The footer line:

<?php include $_SERVER['DOCUMENT_ROOT'] . '/blog/footer.php'; ?>

Before and after

Here is a simple page before. Your menu and footer will have different content, and may start with <nav> or <div class="navbar"> instead of <header>. The coral lines are the ones you replace:

<body>  <header class="site-header">    <a href="/"><img src="logo.png" alt="Northwind Bakery"></a>    <nav>      <a href="/">Home</a>      <a href="/bread.html">Bread</a>      <a href="/blog/">Blog</a>    </nav>  </header>   <h1>Welcome to Northwind Bakery</h1>  <p>Fresh bread every morning.</p>   <footer class="site-footer">    <p>© 2026 Northwind Bakery</p>  </footer></body>

And the same page after. The whole <header> block, from <header to </header>, became the menu line, and the whole <footer> block became the footer line. The page's own content in between stays exactly as it was. The coral lines are what took their place:

<body>  <?php include $_SERVER['DOCUMENT_ROOT'] . '/blog/header.php'; ?>   <h1>Welcome to Northwind Bakery</h1>  <p>Fresh bread every morning.</p>   <?php include $_SERVER['DOCUMENT_ROOT'] . '/blog/footer.php'; ?></body>

Do it on each page

For each page of your website (for example index.html), open it in your hosting's File Manager or a code editor, then:

  1. Find the whole menu block, from its opening tag to its closing tag. Frame Setup shows you its first and last line. On other pages the line numbers may differ, so look for those same lines.
  2. Delete it, tags included, and paste the menu line in its place.
  3. Do the same for the footer, with the footer line.
  4. Save the page, then rename it from .html to .php, for example index.html to index.php. The two lines only work in .php files. If other pages link to index.html, change those links too.

Warning: Replace the old block. Do not paste the line inside it or next to it, or the menu shows twice. Open the page to check: you should see one menu and one footer.

Renaming changes the page's address

A page called about.html is reached at yoursite.com/about.html. After the rename it lives at yoursite.com/about.php, and the old address stops working. Your homepage is the exception: yoursite.com keeps working whether the file is index.html or index.php.

  • A new website, not yet on Google: rename every page you want the shared menu on now, in one go. Nobody knows the old addresses yet, so there is nothing to forward later.
  • A website people already visit: rename the pages, then forward each old address to its new one, so bookmarks, links from other websites and Google results still arrive. Add one line per renamed page to the .htaccess file in your website's main folder (create the file if there is none):
Redirect 301 /about.html /about.php
Redirect 301 /contact.html /contact.php

Open an old address afterwards to check: the browser should land on the .php page. Google then replaces the old address with the new one by itself over the next weeks.

Tip: You do not have to convert every page. A page you leave as .html keeps working with its own copy of the menu; it only misses later changes you make in Frame Studio.

What next

Want to change a link, swap the logo or add a menu item? Use Frame Studio.

Still stuck? Write to us — we read every message.