Сортировка массива по ключу

Функция сортировки массива по ключу

function _ksort($data, $name, $sort = SORT_ASC)
{
	foreach ($data as $key => $row) 
	{
		$value[$key]  = $row[$name];
	}
	array_multisort($value, $sort, $data);
	return $data;
}

 

TypeError: Joomla.optionsStorage is undefined - быстрый fix

Если часть плагинов не работает в админке сайта и консоль разработчика выдает ошибку:

TypeError: Joomla.optionsStorage is undefined

как описывал в другой статье (Joomla 3.7.x - если не работает плагин TinyMCE), это связано с косяком параметров. Так вот нашел более предпочтительный вариант чем везде и всюду вставлять парсер параметров. Для решения задачи нам необходимо в исполняемом .js вставить кусок кода.

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

Joomla 3.7.x - если не работает плагин TinyMCE

Если не работает TinyMCE плагин и в консоле разработчика выдает вот такие ошибки:

TypeError: Joomla.optionsStorage is undefined - tinymce-builder.js:278:1
TypeError: Joomla.optionsStorage is undefined - tinymce.min.js:1:361

, это значит что плагин не может вытащить параметры передаваемые Joomla в json формате

Не стал долго и упорно выяснять причину и ковыряться во всей джумловской каше, а попросту написал свой парсер в обход core.js. Не стоит забывать, что это временное решение и с обновлением скорей всего слетит, а может это мой косяк в движке. В общем не удивлюсь, что вскоре косяк исправят.

И так приступим:

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

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']];

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

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

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')

Вот как то так

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