I recently had a very strange problem with my B2evolution installation. Some of my posts had gone missing! When I say missing I mean half missing! You could search for the articles and they would appear in the list of search results. You could also find them by looking at them in the year/month/day grouping view. When the article was displayed in the results view or the date grouping view it looked fully formed, however when you clicked on the title to open the actual article it replaced the last '-' (dash or minus (for the search engines ;) )) in the URL title with a ':' (colon) and gave the message:
Tags: move-a-window-when-its-title-bar-is-off
Sorry, there is nothing to display...
I asked in the forums and they said check the configuration file for a work around. So in $BLOGROOT/conf/_advanced.php
I found the comment in question:
// Enable a workaround to allow accessing posts with URL titles ending with dash (workaround for old bug).
In b2evolution v2.4.5 new tag URLs were introduced: You could choose to have tag URLs ending with a dash. This lead to problems with post URL titles accidentally ending with a dash (today, URL titles cannot end with a dash any more): Instead of displaying the post, the post title was handled as a tag name. When this setting is enabled, all tag names which are exactly 40 chars long and end with a dash are handled in the following way:
Try to find a post with the given tag name as the URL title. If there is a matching post, display it; otherwise, display the normal tag page.
Note: If you use a 39 chars-long tag name, have an URL title which is the same as the tag *but* additionally has a dash at the end and you use the dash as a tag URL "marker", you won't be able to access either the post or the tag page, depending on the value of this setting.
/**
* Enable a workaround to allow accessing posts with URL titles ending with
* a dash (workaround for old bug).
* ...
* @global boolean $tags_dash_fix
*
* @internal Tblue> We perhaps should notify the user if we detect bogus
* post URLs (check on upgrade?) and recommend enabling
* this setting.
*/
So to fix the problem immediately add the following line to $BLOGROOT/conf/_basic_config.php
:
$tags_dash_fix = 1;
This will fix the problem and give you time to fix the database. Fixing the database requires SQL command line access to the database so careful what you do! Always take a backup before attempting any SQL on a database.
To check which other articles have been affected you can run the following bit of SQL:
SELECT post_ID,
concat('|', post_urltitle, '|')
FROM evo_items__item
WHERE post_urltitle like '%-';
This gives you the following output. I have surrounded the post url title with '|' (pipe) characters so you can easily see where the field value starts and stops.
+---------+--------------------------------------------+
| post_ID | concat('|',post_urltitle,'|') |
+---------+--------------------------------------------+
| 132 | |attempted-to-assign-id-from-null-one-to-| |
| 53 | |import-and-access-to-mysql-database-for-| |
| 90 | |move-a-window-when-its-title-bar-is-off-| |
| 105 | |prevent-tomcat-redeploying-when-running-| |
+---------+--------------------------------------------+
We will now run the SQL that removes the last '-' (minus or dash) from the post's URL title.
UPDATE evo_items__item SET
post_urltitle = substr(
post_urltitle, 1, length(post_urltitle)-1
) WHERE post_urltitle like '%-';
For each record where the
post_urltitle
ends with a '-' (minus), replace it with the parts of the text from character position 1 to character position one less than the length of the text.
When you have completed the database fix you can remove the $tags_dash_fix
line from $BLOGROOT/conf/_basic_config.php
.
The current B2evolution code prevents post URL titles from being created ending in a '-' (minus or dash) so once you have fixed the issue it doesn't need to be revisited.