• Multiple authors

    Multiple authors

    When your blog is meant to be managed by several users with different kind of permissions, this parameters could be useful:

    1. Use advanced perms: checking this you will enable two additional tabs to control specific permissions over posts, comments and media files on this blog/collection. Those permissions could be granted per user or groups of users. Default value: disabled. More information about Advanced permissions could be found in this page: User Permissions and its links.
    2. Use workflow: this option enables the Tracker tab, letting you to be able to set Priority, Status and Deadline to your posts, and assign them to a specific user as well. Default value: disabled. More information about Use workflow could be found in this page: Workflow view
  • Uploading and Posting Files/Images

    A very common task is uploading a photo and displaying it in a blog post.

    Uploading files/images

    1. Go to the Write page by clicking on the Write button at the top header menu.
    2. Uploading and Posting Files/Images
      And it will take you to the post writing page.
      Uploading and Posting Files/Images
    3. It is required that you should fill out the post title and then you should save your work before being able to attach an image/file.
    4. Locate the Images & Attachments section which is below the Post contents area.
      Uploading and Posting Files/Images
      If you haven’t saved your post yet the Save & start attaching files button is displayed and you can click on this to save the post and enable attaching images/files.
    5. Click on the Add/Link files at the header of the section.
    6. A new window pops out, displaying the file manager. You can create or choose which directory you’d like to store the file that will be uploaded.
    7. Uploading and Posting Files/Images
    8. You have several ways to upload the file, either by dragging and dropping the file to Drag & Drop area or by clicking the Browse button then selecting the file on your computer that you want to upload.
    9. If you choose to go with the Browse button, after selecting the file - click the > Quick upload! button to upload.
    10. Once the file is uploaded, a notification will appear providing options/instructions on how you can attach/insert this image in a blog post. You could either (1) copy and paste the code, or (2) just click on the Link this image to your item link.
    11. Uploading and Posting Files/Images
    12. Close the pop-up window.
    13. If you went with clicking the Link this image to your item link, then you’ll see that the file have been added to the Images & Attachments section. Keep in mind that this file is just attached but not yet inserted to the content of the post.
    14. Uploading and Posting Files/Images

    Posting the image that you’ve uploaded earlier

    1. First, on the text editor locate where you would want to insert the image. Position the text cursor to that location.
    2. Uploading and Posting Files/Images
    3. At the Images & Attachments section, click on the circle green plus button.
    4. Uploading and Posting Files/Images
    5. An image bbcode will appear where you’ve pointed the text cursor. This is the representation of the image that you’ve selected and inserted.
    6. Uploading and Posting Files/Images
    7. Click save and now you’ve just completed inserting an image to a post.

    Related pages

  • Other uses of collections

    This man page refers to an old version and needs to be updated

    Blog #1: All blogs aggregation

    Blog #1 is configured to have a special behaviour: it aggregates ALL categories of ALL blogs on the system.

    To hide blog #1 or any other blog from the blog list, uncheck "Include in public blog list" in the Blogs tab.


    Many bloggers have a list of blogs they read (and recommend to others) on the side of their blog page. This is often refered to as a BlogRoll. Basically it is a list of links.

    b2evolution's approach to the BlogRoll is to use a dedicated blog in which each list entry is simply a blog post with mainly a title and a URL. The only differences with a normal blog is that the posts are displayed in a compact list style and that they are orderred alphabetically and/or by category instead of being displayed chronologically.

    Several blog templates (for example _main.php in the "custom" skin) include a specific blog as a BlogRoll next to the main blog's posts.

    You will find the code that displays the blogroll in /skins/_blogroll.php. It is actually nothing but a simplified to the max version of a regular blog template.

  • Version

    Stable release

    The most stable release can always be downloaded from the Downloads section.

    This is the version recommended for most users.

    Old releases

    A history of all previous releases is available here.

    We do not recommended that you use an outdated release. We always recommend that you upgrade to the latest stable release as soon as possible.

    Alpha and beta releases

    When alpha and beta releases newer than the latest stable release become available they will be listed on the
    Downloads page.

    You can use them if you feel comfortable with hacking around a litle bit and you are ready to upgrade again shortly thereafter.


    The CVS version is mostly useful to developers. You can also use it if you’re and advanced user and like to live on the edge. Stability and security are very likely to be less than ideal if you run a CVS version on production.

  • SourceForge

    We now use GitHub instead of SourceForge.

    We had two projects hosted on SourceForge.Net:

  • How to Change the Appearance of my Permalinks

    This page refers to an older version of b2evolution.

    The default Permalink in b2evolution look something like:

    You can change this behavior to something cleaner by going to the backoffice under the Blog Settings > URLs tab. There you can choose different link formats. For example:

    On the Collection URL settings you can also set different "Permalink type" options which determine whether your links are referenced by their database ID or by the title.

    Going farther

    Here’s how to get rid of index.php and make your urls look more like this:<br />

    After you’ve set up your webserver by following one of the instructions below, go to your blog settings > URLs and select "Default blog on index.php" for example.

    Apache webserver

    Most probably you’re using the Apache webserver, so try editing the .htaccess file at the root of your site and add the following lines (this requires mod_rewrite to be enabled):


    RewriteEngine On
    # The next line isn't always needed, but try uncommenting (removing the hash
    # sign in front of the line) and setting it to the path to your "blogs" folder.
    # If your URL is e. g. http://example.com/blogs, then set this to /blogs/. If
    # your URL is http://example.com, set this to /.
    #RewriteBase /blogs/
    # Redirect anything that's not an existing directory or file to index.php:
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^  index.php

    lighttpd webserver

    If you’re using the lighttpd webserver instead, a little bit more work is required.
    As of 2009-02-03, the author of this article uses lighttpd 1.4.13 on Debian Etch.

    You need mod_magnet, so install it with apt-get or aptitude (the package is named lighttpd-mod-magnet) and enable the module as described here.

    Then save the following .lua script somewhere on your server and modify the variable "prefix" (look for it after the "Main script" comment), if needed:


    -- Original source: http://www.final-network.de/lighttpd-rewriterule
    --[[ This function splits a string by a delimiter and returns the parts
         as a table. ]]--
    function string:split( delimiter )
        local result = { }
        local from   = 1
        local delim_from, delim_to = self:find( delimiter )
        while delim_from do
            table.insert( result, self:sub( from, delim_from - 1 ) )
            from = delim_to + 1
            delim_from, delim_to = self:find( delimiter, from )
        table.insert( result, self:sub( from ) )
        return result
    -- ** Main script ** --
    if ( not lighty.stat( lighty.env['physical.path'] ) ) then
        --[[ Relative path to the application's root dir, without a trailing
             slash. If the path is simply /, set this to an empty string. ]]--
        local prefix = '/blogs'
        local index_file = '/index.php'
        local path = ''
        local last_found = ''
        -- Detect the part of the path which points to a existing file:
        for key,part in ipairs( ( lighty.env['physical.path']:sub( 2 ) ):split( '/' ) ) do
            path = path .. '/' .. part
            if ( not lighty.stat( path ) ) then
            last_found = path
        -- Is the detected path the same as the path to the application's root dir?
        if ( last_found == lighty.env['physical.doc-root'] .. prefix ) then
            -- Yes! Rewrite the request to the index file:
            lighty.env['uri.path'] = prefix .. index_file
            lighty.env['physical.rel-path'] = lighty.env['uri.path']
            lighty.env['physical.path'] = lighty.env['physical.doc-root'] .. lighty.env['physical.rel-path']

    This script only works properly if your doc root does not end with a slash.
    Add the following line to your configuration file, modifying the path to point to the Lua script you just saved:
    magnet.attract-physical-path-to = ( "/var/www/b2evo_rewrite.lua" )

    Now restart your webserver and pray that you now can use clean URLs. ;-)

    Nginx webserver

    Open your nginx.conf or virtual.conf file, it should look something like below. Take note to replace the root path with the path to your installation. ‘'’Don’t move”’ "locations" around, they need to stay on their places, it’s important!


    server {
      listen  80;
      server_name www.domain.com domain.com;
      root  /home/www/domain/public_html;  #absolute path to installation of b2evo
      index  index.php index.html index.htm;
      # Never cache admin.php
      location ^~ /admin.php {
        include      fastcgi.inc;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      # Cache everything for 7 days. No PHP in "rsc" directory!!!
      location ^~ /rsc/ {
        access_log off;
        expires 7d;
      # Deny access to sensitive stuff
      location ~ ^/(cache|conf|cron|inc|locales)/ {
        return 404;
      # Never cache PHP scripts in these directories
      location ~ ^/(htsrv|xmlsrv|plugins)/(.+\.php)(.*)$ {
        include      fastcgi.inc;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      # Uncomment if you put b2evo in sub-folder (testing needed!)
      # location /blogs {
      #  if (!-e $request_filename) {
      #    rewrite ^(.+)$ /blogs/index.php?$request_uri last;
      #  }
      # }
      # Direct call to .php file
      location ~ ^(.+\.php)(.*)$ {
        # This location may be cached
        # You need to set no_cache cookie in b2evo and validate it here
        include      fastcgi.inc;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      location @php {
        if (!-e $request_filename) {
          rewrite ^(.+)$ /index.php?$request_uri last;
        # This location may be cached
        # You need to set no_cache cookie in b2evo and validate it here
        fastcgi_index    index.php;
        include      fastcgi.inc;
        fastcgi_param    SCRIPT_FILENAME  $document_root/index.php;
      # See if we can get a static file, transfer request to @php location if file not found
      location / {
        try_files $uri $uri/ $uri/index.php @php;
        access_log off;
        expires 7d;
      # Deny access to sensitive stuff
      location ~ /\.ht { deny all; }
      location ~ /error_log$ { deny all; }
      location ~ /core$ { deny all; }
      location /_backup { deny all; }
      location = /robots.txt { log_not_found  off; }
      location = /favicon.ico { log_not_found  off; }

    Your fastcgi.inc file should look something like this. (please refer to the nginx documentation to setup your fastcgi spawned processes and port binding)


    fastcgi_pass;   #unix:/tmp/php-fpm.sock;
    fastcgi_buffers      256 16k;
    fastcgi_buffer_size    32k;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param  REDIRECT_STATUS    200;

    Restart your web server and you should now have clean urls in the form of (or something like that)

    Note that this config also covers links like this. No changes needed

    _ vs -

    With b2evolution 2.0, underscores are changed into dashes/hyphens. The permalink would look like this:<br />

  • Skin/Plugin XML Descriptions

    This page specifies possible tags, attributes and values for the xml files describing the skins, and possibly the plugins, their latest version, etc.

    In the end I think we have 3 to 4 different xml file formats:

    1. skininfo.xml which ships along with each skin
    2. plugininfo.xml which is fully redundant with the plugin.php so probably not needed
    3. skinlist.xml which contains a full list of what can be offered to a user
    4. pluginlist.xml which contains a full list of what can be offered to a user

    They all contain different sets of the same tags:

    • 1 and 2 get into the DB on skins/plugins.b2evo.net
    • 3 and 4 get out of the DBs
    • tag/entity: skinshot
      • skininfo: -
      • skinlist: yes
      • plugininfo: -
      • pluginlist: -
      • values: URL
      • description: 240*180 px image
      • multiplicity: 1
    • tag/entity: color
      • skininfo: yes
      • skinlist: yes
      • plugininfo: -
      • pluginlist: -
      • values: red|yellow|purple|gray|black (CSS color names)
      • description: dominant color
      • multiplicity: +
    • tag/entity: tested_on
      • skininfo: yes
      • skinlist: -
      • plugininfo: yes
      • pluginlist: -
      • values: 1.10.0-beta
      • description: b2evo version this has been tested on
  • Timeouts

    This section contains two fields that you can set to change your timeout settings.


    Reload-page timeout

    This is where you change the timeout setting that will make a reload count as a new view. You can change both the minutes and the seconds settings but the default settings is 5 minutes and 0 seconds.

    Smart view counting

    You have to check this option if you want to count post views only once per session and ignore reloads from the same IP. More about smart view counting.

    WARNING: Enabling this option may dramatically slow down your site if you have heavy traffic.

  • Chicago admin skin preferences

    Chicago admin skin preferences

    This preferences will be available in the Advanced preferences tab only if the Chicago admin skin is selected.

    1. . Show evobar. Let you show / hide the evobar.
    2. . Show breadcrumbs path. Let you to show / hide the breadcrumbs path. Note: if you hide uncheck this, besides of hiding the breadcrumb path, you also will hide the Page manual link mentioned here: Getting Help.
    3. . Show Menu. Let you show / hide the main menu.

    The image below is a reference to the sections that you may control with the parameters numbered above.

    Chicago admin skin preferences
  • Settings Tab

    The page below applies to old versions of b2evolution.

    In newer versions, the settings are split among multiple pages, in each main tab of the back-office.

    This is the tab for editing settings that apply to all blogs on your installation of b2evolution. Here you can set the default blog, change language settings and install plugins. There are several sub-tabs, and each is dealt with in a section below.

    Note: since 1.8.1 the Settings tab is called App Settings.


    Default user rights

    If you want to allow new users to register themselves, then enable it here and choose which group and user level you want the new user to have once they’ve registered. You can always put new users into a very limited group by default and then an admin can promote them later.

    You can require users to validate themselves by clicking on a link that is emailed to them. This prevents users from signing up with fake email addresses.

    Display options

    "Default blog to display" determines which blog will be shown when a readers goes to index.php. You can also set whether posts are considered individual units or are grouped by days. "Posts/Days per page" is where you set how many posts will appear on your front page and other pages.

    After older posts have been moved off of your front page, you still want readers to be able to find them. The archive section in your blog’s sidebar provides links to help. "Archive mode" is where you choose whether you want a link for each month, each week, each day or each individual post.

    If you post to your blog via MMS? or Email?, the "Email/MMS Auto-BR" setting determines whether line breaks are added automatically.

    Link options

    This section gives you some control over the appearance of the permanent links of your posts and archives. "extra-path info:" is recommended if your webserver supports it. Links will look like ’stub/2006/05/20/post_title’ instead of ’stub?title=post_title&c=1&tb=1&pb=1&more=1′. To get this working properly, you may need to rename the sample.htaccess file that you uploaded to .htaccess. Apache2 users can also uncomment the last line in that file. If you’re still having problems, check with your web host to make sure that extra-path info is supported.

    You may also change the permalink type. Unless you have a good reason not to, use the default, which is "Post called up by its URL title". Your links will be more meaningful.

    Security options

    The default "Minimum password length" is five characters. In general, longer passwords are harder to guess or crack, but shorter passwords are easier for users to remember. If you’re not sure, five characters should be fine.

    Miscellaneous options

    "Reload-page timeout" is the time (in seconds) that must pass before a request to the same URL from the same IP and useragent is considered as a new hit. If you’re not sure what that means, then just leave the default value (300).


    Online Help

    Online help links provide context sensitive help to certain features.

    Blog by email

    Check the box to enable blogging by email. Doing so will reveal the other settings you’ll need to edit. For a more detailed look at this feature, see Email?.

    Hit logging

    Activating "Double-check Referer" will search the requested (your) URL in the content of the referring page. This is against referer spam, but creates additional webserver traffic.

    By changing the "Autoprune stats" value, you can set how many days of stats are stored in the database.

    See also: Analytics Tab


    The "Session timeout" value determines how long a user can stay inactive before they are automatically logged out. The default value is 604800 secconds, or one week.


    b2evolution comes standard with several translations for backoffice and blog navigation text. In fact, you can have bloggers in several continents, speaking several different languages, all on one installation of b2evolution. This is the tab for controlling some of those settings. Individual users can also set their own default locale, and individual blogs can have their own locale.

    See also Collections Tab and | Users & Groups.

    Regional settings

    b2evolution gets the time and date from the server it’s running on. But you may not live in the same time zone as that server. You can set the time difference here using a positive or negative number.

    Available locales

    This section allows you to customize the installed locales. You can change the date and time format, the first day of the week and the language file. There is a link at the bottom of this section for creating a new locale.

    See also Localizing b2evolution.


    Here you can change the settings for the built in file manager, which is accessible from the Files > Browse Tab.

    Filemanager options

    Installations with multiple users can

    • Have all users upload files into the media directory directly, or
    • Enable a directory within the media directory for each user, or
    • Enable a directory within the media directory for each blog, or
    • Enable a directory within the media directory for each user and each blog.

    You can also control whether users are allowed to create directories and files.

    Upload options

    Check "Enable upload" to allow uploading files in general. "Maximum allowed filesize" is the max size (in KB) of file that users can upload. This does not override your web server’s maximum upload size. If you set this value higher than the server limit, your uploads may fail.

    Advanced options

    These regular expressions set what characters can be used in file names and directories. Don’t edit them unless you understand regular expressions.

    File types

    In this sub-tab, you can control settings for file types. You can set the icon, extensions, name, mime type, view type, and whether users can upload this type of file.

    If you create a new file type, put the icon in the `/rsc/icons/fileicons/` directory.

    See also tab

    Post statuses

    b2evolution allows you to create custom post statuses.

    Post types

    b2evolution allows you to create custom post types.


    Here you can setup the thresholds for deletion or moderation of comments and define the ‘’spam detection relevance weight'’ of the plugins that provide a method to get spam karma.


    Plugins are extensions to b2evolution that can be installed and used without the need to edit code. This tab is where you install and configure plugins.

    Installed plugins

    This table lists all of the plugins that have been installed. You can activate and de-activate them, edit their settings, view their help files and uninstall them.

    The link "Reload events and codes for installed plugins" should only be needed if you edit the plugin php file and add or remove events or change the plugins unique id code. Upgrading to a new version of a plugin may require using this link. Plugin developers will also find it useful.

    Available plugins .

    Once a plugin file or directory has been added to the /plugins/ directory of b2evolution, the plugin will be listed in this table. It won’t be listed in the table above until you click "install".

    See also Plugins, Creating a Plugin, Plugins Repository

    Schedular tab

  • CVS

    b2evolution is now on GitHub, so the following no longer applies.


    b2evolution used to be developed in a central CVS repository at SourceForge. This allows users to grab any version of b2evolution they want, including the latest development version.

    The normal way of obtaining b2evolution is through the page. It is not recommended to use any CVS version unless you know what you’re doing.

    The page about b2evolution CVS on sourceforge can be found here: http://sourceforge.net/projects/evocms/ . That page includes help about accessing CVS on sourceforge.

    See also: SF CVS wiki


    Think of the b2evolution project as a tree, now each version/release of it is a branch of that tree. The latest development build, or the newest branch is called/titled ‘’ ‘HEAD’ ‘’. Now older branches are titled by their version number, or similiar. Now just like a real tree, branches still grow, this means that even though the developers are working on a new release, they may also be updating previous releases. This is one of the reasons why CVS is used.

    Read the following section carefully, and make sure you understand who should be using CVS and why.

    But which branch should I use?

    • If you want the latest cutting edge stuff and don’t care about stability, then use the HEAD branch.
      • The HEAD branch ‘’DOES NOT OFFER SUPPORT'’.
      • Why use the CVS HEAD branch?
        • If you are a developer who wants to work with the latest features or keep your work up to date.
        • If you are a tester who does not care about stability and would like to post bug reports to help make the development release better.
          • Think of using the HEAD branch as ‘’BETA testing'’, you are there to make the product better, to help out with it’s development. NOT to use it as a general replacement.
    • If you want to use a supported release, but still with the cutting edge features, use an alternative branch than the HEAD branch.
      • For v1.8-beta, the branch is ‘’v-1-8′’
      • Why use previous CVS branches?
        • So you can easily append features and hacks to the latest stable release.
        • So you can use plugins that require certain patches to be made to the project.
        • An older branch may be updated to include new features etc, but the changes may not be enough for a public release, so you can use the CVS version for acquiring the updated branch instead of waiting.

    Getting started

    Make sure you read and understood the previous section. And that you are sure you understand who should be using the CVS version and why.

    Download Instructions (TortoiseCVS)

    1. Install TortoiseCVS
    2. Make a folder where you want your b2evolution folders to go
    3. Right click the folder and do ‘CVS Checkout’
    4. Enter the following information, then press the ok button.
      • —Module
      • CVSROOT: :pserver:anonymous@evocms.cvs.sourceforge.net:2401/cvsroot/evocms
      • Protocol: Password server (:pserver:)
      • Protocol parameters:
      • Server: evocms.cvs.sourceforge.net
      • Port: 2401
      • Repository folder: /cvsroot/evocms
      • User name: anonymous
      • Module: b2evolution
    h3> Notes (TortoiseCVS)
    • Alternatively, to set the branch and module names you can use update/fetch list and then pick the appropriate one you want.
    • If you would like to grab the v-1-8 or any other stable release builds, In the ‘Revision’ tab, Select ‘Choose branch or tag’, then type the desired branch/tag name. (e.g. 1.8-beta -> ‘v-1-8′). ‘’Refer to previous note.'’
    • If you just want to download the CVS build without any of the CVS developer files and information, go to the ‘Options’ tab and check ‘Export’ instead of ‘Checkout’
    • You can just grab the /blogs/ folder instead of the /b2evolution/ folder as well, by changing the module name to ‘b2evolution/blogs’.

    Download Instructions (WinCVS)

    1. Install WinCVS
    2. Make a folder where you want your b2evolution folders to go
    3. Run WinCVS
    4. Goto; Admin -> Command Line (ctrl+L)

    For the latest CVS HEAD branch enter the following, then press ok.


    cvs -z3 -d:pserver:anonymous@evocms.cvs.sourceforge.net:/cvsroot/evocms co -P b2evolution

    For the v-1-8 CVS branch enter the following, then press ok.


    cvs -z3 -d:pserver:anonymous@evocms.cvs.sourceforge.net:/cvsroot/evocms co -r v-1--P b2evolution

    Contributing code to CVS

    If order to contribute code, you will have to "check in" your modifications using CVS. this can be done with TortoiseCVS or WinCVS. However, in order tocheck in files you will need to create an account at sourceforge, get approved and then use CVS with that account instead of the anonymous access methods described above.

    For more info, refer to documentation & wiki available from SourceForge.

    Problems when using CVS version

    The main problem is you may run into is when the database schema changes:
    We have a global variable $new_db_version that gets checked on each request if it matches the schema in the DB. If it does not match, you have to run the upgrade script. The problem is that we do not update this variable in CVS if we change the DB schema. So you’ll have to watch the files /install/_functions_evoupgrade.php and /inc/_misc/_db_schema.inc.php (quite fresh in CVS).

    With |version 1.8 we’ve switched to use a db_delta() function that generates delta SQL queries to change the current DB to the one in _db_schema.inc.php. So, when this file changes (after CVS update), you just have to manually go to the /install/ folder with your browser, request an upgrade and your DB schema should get adjusted.

    However, you’ll still have to watch the changes in /install/_functions_evoupgrade.php!

  • Blog All

    ‘’The "Blog All" tab was relabeled "List" beginning in version 2.0, and blog aggregation took a new approach that does not involve a Blog All pre-installed page. See Blog List if you are using version 2.0 or higher.'’

    What is the "Blog All" blog?

    "Blog All" is a special blog that is designed to show the admin ‘'’every post”’ that is posted in ‘'’every single blog on your site”’. For example, if you have a blog called "Apple" and another separate blog called "Microsoft", the Blog All blog is going to take all the posts from both Apple and Microsoft and display them together.

    Not only does Blog All aggregate normal blogs, it also will include posts to any | linkblogs you use with your blogs (because a linkblog is really just a regular blog used for a special purpose).

    How can I use the "Blog All" blog?

    The Blog All is great for pulling blog content together. For example, if you had a family website where each family member had their own blog you could visit the Blog All and get news on the whole family at once.

    The Blog All can also be a useful tool for a site administrator with lots of users posting on lots of blogs. Since all the posts will show up in the Blog All it’s an easy way to monitor the activity on your entire site.

    The Blog All can be renamed and modified just like any other blog on your site. Just remember that it is the only blog with this special function.

    Can I delete the "Blog All" blog?

    You cannot delete Blog All. It is the primary blog in the b2evolution database structure. You can "disable" it, however. Just make sure that no one has any ‘write’ access to Blog All.
    #In backoffice? go to the Blogs tab?, select Blog All and then the ‘permissions’ sub-tab.
    #Disable all ‘crosses’ for everybody, so nobody will have any rights on Blog All.
    #In the Blogs tab? go to ‘General’ and uncheck the box to include Blog All in the bloglist.

    Can I exclude individual blogs from displaying on the "Blog All" blog?

    b2evo posts are not linked to any specific blogs on your site. Instead they are tied to the specific category (or categories) you assign them to. So in order to keep a blog from displaying on the Blog All you would need to hide the specific categories which correspond to the blog you don’t want showing up. Read this forum thread for more detailed instructions.

    In future versions of b2evolution the Blog All will be greatly reduced in importance and you will not have to go to such great lengths to disable it.

    A common mistake with "Blog All."

    "Blog All" is useful for many things, but it is not intended to be your primary production blog. One of the biggest errors new users make is choosing the "Blog All" as their default blog page. You can read more proper blog setup on the [[Sample/example blogs]] page or the my blog? page.

  • Pretty URL

    Let’s assume you have a default installation of b2evolution:

    • Blog All can be accessed through index.php?blog=1
    • Blog A can be accessed through index.php?blog=2
    • Blog B can be accessed through index.php?blog=3
    • The Linkblog can be accessed through index.php?blog=4

    Let’s start with Blog A

    Let’s start with blog A, because it is the easiest. b2evolution ships with an alternative file to call blog A! In your URL, try replacing the end index.php?blog=2 with a_stub.php. You should access the exact same page. That’s because b2evolution ships with the file a_stub.php which is preconfigured for acting as if index.php was called with parameter blog=2.

    However, if you now click on an internal link on this page, say "Last comments", you will notice that b2evo throws you back to index.php?blog=2 !

    That’s because b2evo doesn’t know (yet) that you want to use a_stub.php instead of index.php?blog=2. You must set this up in the admin, under blogs then Blog A. Under "Preferred access type:", you must select "Explicit reference to stub file (Advanced)" and then name the stub file name in "Stub name:"; here you should enter a_stub.php. Validate your changes.

    Now, you can refresh the blog page and click on some links. You will notice that you now stay on a_stub.php and no longer get redirected to index.php?blog=2.

    Now with Blog B

    Try the same operations as above on blog B (blog number 3) and try to associate it with a stub file named b_stub.php. You will notice that you get a "404 Page not found" error from your webserver!

    That is because b2evolution does not ship with a file named b_stub.php !

    Now try to duplicate the file a_stub.php as b_stub.php on your webserver.

    What happens if you acces this page? You will notice that you no longer get an error, but b_stub.php displays Blog A just as a_stub.php did! This is not what you wanted!

    This happens because b_stub.php contains preset parameters so that you don’t have to pass these on the URL. In this case, it contains a hardcoding for blog=2 and blog #2 is blog A, not blog B. (You can see the blog numbers in the admin, under Blogs).

    To correct that, you must open the file b_stub.php with a text editor and find the following line:
    $blog = 2; // 2 is for "demo blog A" or your upgraded blog (depends on your install)

    Replace this line with:
    $blog = 3;

    Take special care not to forget the $ sign in front of $blog, as well as the semi column ( ; ) at the end of the line. The white space and the comment after // can be omitted.

    Save the file (and upload it to your webserver if necessary).

    Calling b_stub.php should now work as expected. :)

    The file b_stub.php is what we call a Stub File. You may have noticed that it also lets you set other parameters than just the blog number. For more information on this, see StubFiles.

    In short, this is how a stub-file looks like


    $blog 2;       
    $show_statuses array();
    $linkblog_cat '';
    $linkblog_catsel array( );
    $timestamp_min '';
    $timestamp_max 'now';
    require_once dirname(__FILE__).'/conf/_config.php';
    require $inc_path.'_blog_main.inc.php';
  • Blog ALL and Aggregating blogs

    b2evolution version 0.x & 1.x only – does NOT apply version 2.x and above

    Blog #1 automatically aggregates all the content of all other blogs.

    In B2evo 2.x & above, any blog can be set to aggregate any number of other blogs by entering a list of individual blog IDs to aggregate.

    A common mistake

    One of the biggest errors new users make is choosing the "Blog All" as their primary blog page. "Blog All" is a special blog that shows every post that is posted in every single blog on your site. "Blog All" is useful for many things, but it is not intended to be your primary production blog.

    The prefered method

    If it’s just you, and only you, who will use the blog, using "Blog A" for all your content is a good choice. Recycle "Blog A" (rename it and deprecate all existing posts). If you only want one weblog you can hide "Blog B" for the time being. (Again, we don’t recommend deleting it right away. To hide a blog, open the "BlogSettings" tab, click on the blog you want to change and in the "General" tab under "Default display options" uncheck "Display public blog list" and "Include in public blog list". (This appears to have changed. If you go to Blog Settings >> Features find "List of public blogs" you will find the option "Include in public blog list:" where you can display or hide your blog.) Many people start expanding their sites with multiple blogs after they get used to how b2evo works.) The "Linkblog" you can use or hide, depending on whether or not you want links in the sidebar of your "Blog A".

    Just for the record, there are no ill effects if you simply decide to delete everything you see and start from scratch. If that works for you, go right ahead.

    But still : don’t use blog 1 (aka Blog All) for actual blogging…

  • Changing your Profile

    Through your user profile you will be able to edit your information, which includes your user name, uploading a profile picture, changing your password and modifying your preferences.

    Accessing Your Profile

    You can access your personal settings through two locations in the back office. The first is by hovering over your user name located to the right of the top menu, and then choosing ‘Edit your profile…’ in the drop down options (See Arrow 1). Clicking on this tab will send you directly to your profile settings.

    Changing your Profile

    Alternatively, you can also edit your profile information by clicking on the ‘Users’ tab, which is located on the blue menu bar (See Arrow 2). Going this route will first direct you to a list of users, from which you can then choose the profile that you want to edit (See Arrow 3).


    Under the ‘Identity’ tab, you can edit your login and display name, as well as enter personal information like your location and age. With the exception of your login, all the information under this section is optional (See Arrow 5). It’s important to note that your user login can only contain letters, digits and the following characters: ‘_’ - so, keep that in mind when choosing a new user name.

    Changing your Profile

    Following the ‘Identity’ tab, you will also find the option to include more information about yourself on your user profile, including your personal website, social networking profiles, your user role, and any additional information you feel is pertinent. If an orange arrow appears next to a line, then you have the option to visit the URL that you have entered to ensure it points to the correct location (See Arrow 6); the link will open in a new browser tab. You can add additional websites, social profiles, and roles by clicking on the green circle with the plus sign (See Arrow 7).

    Changing your Profile

    Profile Picture

    In addition to being able upload a new profile picture through the ‘Identity’ tab of your profile located on the main user screen (See Arrow 4), you can also navigate to the ‘Profile Picture’ tab, as well (See Arrow 8).

    Changing your Profile

    There are two ways to upload a profile picture: 1) you can upload it from your computer by clicking on the ‘Choose File’ button (See Arrow 9), or 2) you can select a previously uploaded picture from the file manager and assign it as your new profile image (See Arrow 10). Once you have found the image you want to use, click the link button to the left of the picture’s name (See Arrow 11).

    Changing your Profile
    Changing your Profile


    You can change your password at any time through your user profile. Passwords must be a minimum of 5 characters long, and you can abandon your password change request as long as you haven’t hit the ‘Change Password’ button (See Arrow 12).

    Changing your Profile


    Under the ‘Preferences’ tab, you are able to change the email address that correspondence is sent to, how other users are able to contact you, and the format that you would like receive emails in (See Arrow 13). If you do not wish other users to have access to your email address when they send you a message, it’s important to check the box that says, "emails through a message form that will NOT reveal my email address." Additionally, you can also control how long you remain logged in and whether or not your status will be publicly displayed as online (See Arrow 14).

    Changing your Profile


    Under this section you can choose the type and frequency of the notifications that you receive by email (See Arrow 15). You can also view the subscriptions that you currently have to any blogs or individual posts (See Arrow 16).

    Changing your Profile


    Here, you have the option of customizing how the back office appears to you, which includes changing the admin skin. There are two skin choices: evo and chicago.

    Changing your Profile


    Under the ‘Admin’ tab, you will be able to see your current user level; the higher your level, the more editing permissions you have (See Arrow 19). This is also where you can change your email, see your registration information, and view additional information about your activity as a user.

    Changing your Profile


    Under ‘Sessions’ you have the ability to track all of the recent sessions that you have logged as a user through your profile. This includes the date and time that you were last logged in, how long the session lasted, and the remote IP associated with the session.

    Changing your Profile

    My Activity

    Under the ‘My Activity’ tab, you can view all the posts and comments that you have made, as well as any blogs that you own. From this screen, you also have the option of editing the properties or deleting the posts and blogs that are displayed.

  • How to call a blog from a subdirectory?

    This man page applies to b2evolution version "Phoenix"

    There are situations where you don’t want all your blogs called from the same directory on your web server. This page explains how to achieve this.


    In order to understand the following, you should first get familiar with Calling blogs through different files in the same directory.

    Now let’s assume we have this:

    • Blog A can be called through http://yoursite.net/a_stub.php
    • Blog B can be called through http://yoursite.net/b_stub.php

    Moving blog B

    Let’s assume Blog A is fine where it is, but we’d like to call B through

    Simply create a subfolder (named subfolder in this example) in the root of your webserver. Then move the file b_stub.php into this folder.

    What happens if you try to call that file in its new location through http://yoursite.net/subfolder/b_stub.php? You will get a PHP error saying Fatal error: [...] Failed opening required '[...]subfolder/b2evocore/_blog_main.php' !

    Linking back to the b2evo core files

    The error is because you moved the Stub File b_stub.php out of its original location and now, when the stub file is called, it cannot find the b2evolution core files anymore.

    To correct this, you will have to open the file b_stub.php again (watch out that you open the right one if you still have a copy in the old location!) and edit the line at the end of the file which says:

    You must replace this line with:

    What we have done here is that we have added /.. in the relative path which leads from the stub file to the b2evo core files. /.. means "go back/up one folder.

    Thus if you had installed blog B in
    http://yoursite.net/subfolder1/subfolder2/b_stub.php – which is two levels deeper than the normal location – you would have needed to add /.. two times also, like this:

    ‘WARNING: be very careful not to erase the ?> at the end of the file. Also make sure you do not put any blank space after ?> : no spaces, no tabs, no new lines, no blank lines.

    Save the file and upload it into /subfolder on your wbeserver if necessary. You can now call blog B in its new location.

    Telling b2evo about the new location

    Now, try to click on an internal link of the blog, for example try to access the latest comments. You will notice that b2evolution tries to call the file b_stub.php in its old location, ie not in the /subfolder !

    In order to tell b2evolution that you want Blog B to be rooted in a subdirectory, you must go to the admin, under Blogs then select Blog B. Check that Blog Folder URL: is set to "relative to baseurl:", then enter the subfolder path in the input box on this line. You will notice that the base part of the URL is already known to b2evo. You just need to complete the URL by entering subfolder/.

    Save your changes. Blog B is now fully operational in its new location.

    Using several different subfolders

    If you want, you can put each blog on your system in its own subfolder or nested subfolder tree by repeating the operation. But please note that you should never try to run a stub file at a level that is higher than the b2evo baseurl. b2evo is not designed for this. If necessary, simply set the baseurl as the root url of your website.

    (The baseurl is set during the installation. It can be changed in the _config.php file. See Collections Tab .)

  • General settings

    This man page refers to b2evolution version

    Default User Rights

    Display Options

    Archive mode: choose how you want to group posts when listing the archives. This also applies to the edit page in the backoffice.

    Note on weekly archives: the numbering of weeks and wether weeks start on sunday or monday are determined entirely by the database . If you want to alter the way days are grouped into weeks, you must alter the database configuration, not b2evo.

    In mySQL < 4.0, the WEEK() function is forced to mode 0: Week starts on Sunday; Value range is 0 to 53; week 1 is the first week that starts in this year.

    Link Options

    Security Options

    ! See also

    Some advanced settings are not available though the administration interface. See AdvancedConfiguration.

  • Converting WordPress Themes

    This page gives an overlook as to how to convert WordPress themes into b2evolution 2.2.1+ skins.

    Notes: his guide is several years old now and:

    - does not apply to b2evolution v6 skins
    - may not apply to recent WordPress themes.

    While WordPress themes used to be very different, since WP 1.5, WP themes are now very similar to evoSkins. This makes porting relatively easy. Converting from the one to the other will mainly be a matter of renaming files and tags…

    Getting Started

    Note that the best way to get started would probably be to compare the default WordPress ("kubrik") theme with the "evopress" b2evolution skin. Those are the same design implemented for each platform.

    Now, if you want to start with a theme of your own, let’s assume the theme/skin is named ‘’mydesign'’…

    Copy the folder /wordpress/wp-content/themes/mydesign/ to /b2evolution/skins/mydesign/

    Renaming the files

    Reference pages: WordPress vs. b2evolution?

    Inside of /b2evolution/skins/mydesign/ , rename the following files:

    Converting WordPress Themes

    Replacing the skin tags

    Reference pages: WordPress vs. b2evolution - Wordpress to b2evolution tags

    Let’s start by editing the basic files…


    Add these lines at the beginning of the CSS file:


    @import url(../../rsc/css/basic.css);  /* Import basic styles */
      @import url(../../rsc/css/img.css);  /* Import standard image styles */
      @import url(../../rsc/css/blog_elements.css);  /* Import standard blog elements styles */
      @import url(../../rsc/css/forms.css);  /* Import default form styles */
      @import url(../../rsc/css/comments.css);  /* Import default comment styles */


    The WP file should start with:


    <?php get_header(); ?>

    Replace this with:


      // Emulate WordPress!! (Use this for development only!)
      // Make sure you replace this with proper b2evolution markup before redistributing.
      // Using this will NOT provide you with full b2evolution functionality!
      skin_include'_wp_compatibility.inc.php' );
      // This is the main template; it may be used to display very different things.
      // Do inits depending on current $disp:
      skin_init$disp );
      // -------------------------- HTML HEADER INCLUDED HERE --------------------------
      skin_include'_html_header.inc.php' );
      // Note: You can customize the default HTML header by copying the generic
      // /skins/_html_header.inc.php file into the current skin folder.
      // -------------------------------- END OF HEADER --------------------------------
      // ------------------------- BODY HEADER INCLUDED HERE --------------------------
      skin_include'_body_header.inc.php' );
      // Note: You can customize the default BODY header by copying the generic
      // /skins/_body_footer.inc.php file into the current skin folder.
      // ------------------------------- END OF FOOTER --------------------------------

    The WP file should end with:


    <?php get_footer(); ?>

    Replace this with:


      // ------------------------- BODY FOOTER INCLUDED HERE --------------------------
      skin_include'_body_footer.inc.php' );
      // Note: You can customize the default BODY footer by copying the
      // _body_footer.inc.php file into the current skin folder.
      // ------------------------------- END OF FOOTER --------------------------------
      // ------------------------- HTML FOOTER INCLUDED HERE --------------------------
      skin_include'_html_footer.inc.php' );
      // Note: You can customize the default HTML footer by copying the
      // _html_footer.inc.php file into the current skin folder.
      // ------------------------------- END OF FOOTER --------------------------------

    There is a main loop starting with:


    foreach ($posts as $post) {

    Replace that with:


    // Display message if no post:
      while( $Item = & mainlist_get_item() )
      { // For each blog post, do everything below up to the closing curly brace "}"


    Remove everything up to and including:



    (in b2evolution, this is all taken care of by _html_header.inc.php)


    Remove the end of the file, especially:


    <?php wp_footer();

    (in b2evolution, this is all taken care of by _html_footer.inc.php)

    Installing the skin

    Go to the admin panel, Global Settings > Skins install > Install new and install the mydesign skin.

    Then go to your test blog, Blog Settings > Skin and select the mydesign skin.

    The top of the skin should display. Of course, there will be errors because you still need to replace quite a few skin tags, but by now you should have an idea about how to go about it.



    WordPress themes tend to reference the $siteurl variable. While the WP compatibility layer will set this variable, using global variables to construct urls in skins is considered dirty practice. Try to use the appropriate template tags instead.

    Note: if it looks like $siteurl not defined, try adding this on top of your template:


    global $siteurl;

    Advanced features

    Some advanced features like email subscription, profile editing, messaging forms require the skin to be able to include at least the standard sub templates. You may find that you need to include something like this:


      // -------------- MAIN CONTENT TEMPLATE INCLUDED HERE (Based on $disp) --------------
              'disp_posts'  => '',        // We already handled this case above
              'disp_single' => '',        // We already handled this case above
              'disp_page'   => '',        // We already handled this case above
          ) );
      // Note: you can customize any of the sub templates included here by
      // copying the matching php file into your skin directory.
      // ------------------------- END OF MAIN CONTENT TEMPLATE ---------------------------

  • Adding Images or Photos

    There are two ways a photo or image can appear within a blog post in b2evolution.

    You can:

    Adding Images or Photos
    Attach Uploaded Image File
    • Or, you can link to any image on the web (including on your own site) by using an <img> tag, anywhere in your blog post. Click the image icon in the toolbar, enter the image URL and insert into the text box (See Arrow 1 and 2).
    Adding Images or Photos
    Link to External Image

    Note: If you are mainly publishing photos with only minimal accompanying text, there is actually a name just for that: Photoblogging. Please see the Photoblogging page for details.

  • Online Help

    Online Help

    When the online help feature is enabled, help icons are displayed next to certain features within b2evolution. Clicking on these links will open the relevant help topic from http://b2evolution.net/man/ in a new browser window.

  • Known Issues



    Pingbacks won’t work with PHP 4.2. opensocket() implementation seems to be buggued in PHP 4.2. Pingbacks work fine with newer versions of PHP.

    Please note that pingback implementation itself was buggued in b2 but has been debuggued in b2evolution.

    Transaction support

    b2evolution (as all other b2 versions) does not currently implement database transactions. This is due to the fact that mySQL has not been supporting transactions for long enough by now to assume they are commonly available on hosting services.

    Transaction support will be added when mySQL 4.x is commonly available on hosting services.

    UTF-8 and Japanese support

    UTF-8 and Japanese support is still preliminary and not regarded as a stable feature. We are working on full double byte charset support for a later version. [Sakichan]

  • International Manuals

    This page is for linking manuals and tutorials in other languages. (Full length tutorials or sites on b2evolution only; not for individual blog posts)

    If you want to start a manual/help site in your own language, please let us know.

  • User Levels

    In previous versions, users levels allowed to control access to some features, but this is now controlled much more precisely by the User Permissions.

    DEPRECTAED - In previous versions here is what user levels would allow:

    Level 1 and above

    • Ability to view link to admin section (users with level 0 can still login into admin, but there’s no good reason for that, except in rare cases, so they’ll have to find out by themselves…) (on versions < 0.9.2)
    • Ability to upload images (on versions < 0.9.2)

    Level 2 and above

    • Ability to generate static pages

    Level 5 and above

    • Ability to edit timestamp on posts

Comments on this chapter

Form is loading...