Иногда случаются казусы...

В некоторые моменты нам кажется, что жизнь закончилась, но все только начинается... У меня такой был. Все мы знаем, что в Joomla 3+ можно достучаться до любого известного ID материала, набрав его в адресной строке, например http://site.org/5, где 5 - это ID материала. Мне нужно было создать категорию, материал, которые бы выводили код слайдера в модуле материалов. Это в двух словах. Т.е. я создал пустой материал в категории, которую я больше ни для чего использовать не буду...

Мне он был нужен для того, чтобы использовать модуль вывода материала. Для него я создал определенный шаблон (в папке шаблонов модулей), закинул в этот шаблон код слайдера и вывожу его на нужных для меня страницах. Захотелось, чтобы если вдруг кто-то начнет бегать по материалам, например http://site.org/1, http://site.org/2, http://site.org/3, то они не смогли попасть на ID материала слайдера, ведь он просто пустой. Додуматься поставить переадресацию при запросе этой ссылки мне не пришлось, хотя это делается так:

$W=getenv("REQUEST_URI");
if ($W == '/index.php' OR $W == '/pro' OR $W == '/slider') {header('HTTP/1.1 301 Moved Permanently');
header('Location: /');
}

getenv("REQUEST_URI") - это запрашиваемая ссылка пользователем, например http://site.org/slider
в конструкции if else Вы можете видеть: если запрашивают это:  '/index.php' или это '/pro' или это '/slider', то мы автоматически переадресовываем пользователя на главную, сообщая ему заголовок PHP 301 - перемещен навсегда.

Все эти изменения нужно проводить в файле index.php Вашего шаблона Joomla. Код подойдет для любой CMS.

Я решил поменять ID материала, чтобы даже если будут случайно клацать, то явно не попали. А именно поставил наугад ID 8955 и думал, что решил проблему так легко. Но теперь, создавая новые материалы, все они были больше 8955, т.е. поле ID с AUTO_INCREMENT каждый раз добавляло +1 к 8955, следующий ID материала был на 1 больше. У меня сайт свежий и не хотелось бы видеть эти большие цифры в ссылке. Поэтому я начал искать решение проблемы.

Попытался найти все поля, где встречается 8955, но это ничего не дало, кроме моего удивления, что их оказалось довольно много в разных частях БД. Joomla нынче мусорит не слабо... Дальше я догадался отключить AUTO_INCREMENT, но не смог его включить обратно пока... Мне писало что-то типа:

ERROR 1062: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'

Решение:

Поискал в инетике, написал в поддержку хостинга. Но потом просто попытался создать материал. И он создался со значением ID = 0. И следующий тоже. Я присвоил одному значение нужное мне, например, 15. А второй удалил. Затем я смог успешно поставить AUTO_INCREMENT для поля ID и теперь материалы создаются с нужным мне ID (например 20, 21, 22) и по порядку.


И еще как узнать ID Joomla?

На самом деле есть несколько способов, и они работают в разных местах...

Если Вы находитесь в index.php шаблона, то вызвать ID материала Joomla можно так:

$app = JFactory::getApplication();
$active = $app->input->getCmd('id', '');
echo $active;

Если Вы находитесь в /components/com_content/views/article/tmpl/default.php , то вызвать ID статьи Joomla можно так:

echo $this->item->id;

ID категории (находясь там же ^ )

$this->item->catid;

Чтобы узнать ID материала и категории, находясь, например, в модуле:

$app = JFactory::getApplication();
if($app->input->getCmd('option') == "com_content" && $app->input->getCmd('view') == "article" ) {
$article_id = $app->input->getCmd('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('catid'));
$query->from($db->quoteName('#__content'));
$query->where($db->quoteName('id') . ' = '. $db->quote($article_id));
$db->setQuery($query);
$cat_id = $db->loadResult();
echo $article_id . " - " . $cat_id;
}

Еще так:

$id = (JRequest::getVar('option')==='com_content' && JRequest::getVar('view')==='article')? JRequest::getInt('id') : 0;
ID Joomla