canonical bitrix

Для улучшения рейтинга одинакового содержания размещенного на разных страницах, необходимо использовать канонические URL. Как правило это относится к страницам пагинации. На сайтах Битрикс, делаем так:

Добавляем в /bitrix/php_interface/init.php

if ($_REQUEST['PAGEN_1']) {
	global $APPLICATION;
	$APPLICATION->AddHeadString('<link href="http://'.$_SERVER['HTTP_HOST'].$APPLICATION->sDirPath.'" rel="canonical" />',true);
}

Соответственно в шаблоне должна быть объявлена функция:

<?$APPLICATION->ShowHead();?>

Готово!

Joomla 2.5 - API reCaptcha для работы с ajax формой

Если необходимо быстро без сторонних компонентов и модулей реализовать отправку jquery.ajax формы обратной связи и при этом защититься reCaptcha - вот решение. Сразу оговорюсь, не буду описывать как для начинающих, кому надо тот поймет как применить.

Вывод капчи в форме:

<?
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
// Обрабатываем блок dynamic_recaptcha_1 капчей
$dispatcher->trigger('onInit','dynamic_recaptcha_1');
?>
<form action="<?=JURI::root()?>?tmpl=ajax" method="POST">
	<input type="text" name="name" value="" />
	<input type="text" name="phone" value="" />
	<div id="dynamic_recaptcha_1"></div>
	<input type="submit" value="ОТПРАВИТЬ" class="submit" />
</form>
<script>
// Сценарий отправки формы на адрес обработчика
</script>

Скрипт обработчик:

$post = JRequest::get('post');     
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$captcha = $dispatcher->trigger('onCheckAnswer',$post['recaptcha_response_field']);
if ($captcha[0] == false) {
	echo 'false';
} else {
	echo 'true';
}

Вот и все. Естественно не забываем выбрать reCaptcha по умолчанию и прописать в плагине ключики.

catalog.smart.filter - ajax обновление списка без AXAJ_MODE

Не нравится мне работа режима AJAX_MODE в компоненте catalog. Вот хоть убей, но ничего с битриксом в лучшую сторону с годами не меняется. Как был коммерческим продуктом, так им и остался. Где технологичность? Короче простое решение обновления списка с помощью ajax.get

В шаблоне bitrix:catalog.smart.filter редактируем script.js - ищим функцию JCSmartFilter.prototype.postHandler и редактируем следующее

//if (modef.style.display === 'none')
//{
//	modef.style.display = 'inline-block';
//}

$.get(
	result.FILTER_AJAX_URL, 
	function (data)	{
		$('.catalog-list').html($(data).find('.catalog-list').html());
	}
);

.catalog-list - селектор который необходимо обновить. Естественно jQuery должен быть подключен.

Если не работает SECTION_CODE_PATH в bitrix:catalog

В помощь трудящимся!

Если в шаблоне bitrix:catalog.section компонента catalog не работает путь из символьных кодов, как правило это вылазит когда используется вывод товаров и из подразделов - поможет небольшой код в result_modifier.php

$ids = array();
foreach ($arResult['ITEMS'] as $arItem)
	$ids[] = $arItem['ID'];

$res = CIBlockElement::GetList(array("SORT" => "ASC"), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'ID' => $ids), false, false, array('ID', 'CODE', 'IBLOCK_ID' ,'DETAIL_PAGE_URL'));
while($obj = $res->GetNext())
	$arRes[$obj['ID']] = $obj['DETAIL_PAGE_URL'];

foreach ($arResult['ITEMS'] as &$arItem)
	$arItem['DETAIL_PAGE_URL'] = $arRes[$arItem['ID']];

Теперь в независимости от уровня нахождения в каталоге, путь к карточке товара будет выводиться истинный.

Спасибо за внимание! Всем чистого кода!

Bitrix: Что делать если закончился пробный период?

Иногда возникают ситуации когда пробный период уже закончился, а разработка сайта еще нет. Возникают вопросы - Что делать? Как поднять сайт? Есть несколько выходов, поделюсь как выкручиваюсь я

  • Как говорят в интернете, снести, установить по новой, накатить уже сделанное.
  • Написать в тех. поддержку, но вас могут и не услышать. В 90% случаев так и будет.
  • Сделать временный NULL

Вот третьим решением и поделюсь с вами. Хочу заметить я не сторонник null'a на битриксе, т.к. предпочитаю сайты строить на джумле, но клиент хочет битрикс. Хочет, пусть платит за лицензию.

Подробнее...

Joomla - как убрать id материала

Не буду рассказывать про ARTIO JoomSEF, SH404SEF так как не уважаю подобные компоненты/расширения. Предпочитаю следовать архитектуре Joomla, чего и другим советую.

Изучай архитектуру движка, а не ломайте сайты как тебе привычно.

И так, доставучие seo'шники требуют убрать id из url'а материала типа блог. Проделать подобное можно подправив router.php компонента com_content. В функция build() и parse() находим:

$advanced = $params->get('sef_advanced_link', 0);

и меняем на:

$advanced = $params->get('sef_advanced_link', 1);

Так же в функции parse() находим кусок кода и комментируем его:

Подробнее...

Joomla слэш на конце

Joomla не любит слэши на конце, сталкивался с глюками Virtuemart. Но иногда сделать это жизненно необходимо. Конечно можно воспользоваться 301 редиректом .htaccess, но ПС все-равно видит ее без слэша, а перейдя получает 301 редирект. Немножко облегчим задачу роботам )

(j2.5) редактируем includes/router.php в классе JRouterSite находим функцию _buildSefRoute() в ней меняем последнюю строчку

$uri->setPath($route.'/');

(j3.x) редактируем libraries/cms/router/site.php в классе JRouterSite находим функцию buildSefRoute() в ней меняем последнюю строчку

$uri->setPath($route.'/');

Да, этот способ плох тем что после обновления слетит. Но SEO'шники неисправимы, требуют.

Ну и для верности сделать 301 редирект через .htaccess с без слэша на слэшь. Ссылку на статью приводил выше.

Joomla подключение языкового файла

Бывает необходимо подключить языковой файл другого компонента или модуля. Все просто

JFactory::getLanguage()->load('com_namecomponent')

Вот как то так

Cackle комметарии - обработка плагинами Joomla

Пользуюсь системой комментариев от Cackle. В связке с виджетом использую плагин синхронизации комментариев, который индексируется ПС. На днях в комментариях вел дискуссию, в который указал свой email. Надеюсь не для кого не секрет что в дистрибутиве joomla есть плагин маскировки email адресов. Так вот, заметил что комментарии Cackle не обрабатываются плагинами. Полез дорабатывать )))

Лень выкладывать файликами, просто опишу что надо сделать.

Подробнее...

Конвертер CSV из XLS со своим разделителем

Давно это было когда прайсы конвертировались из xls в csv и через компонент CSVI импортировались в Virtuemart. В своей практике делал все связки, но на данный момент чаще задача импорта xml или xls. Но да это случилось, попалась мне такая задача импорта.

Подробнее...

Подкатегории