Четверг, 13 ноября 2014 12:19

Пару полезных вещей на Джумле

Автор
Оцените материал
(0 голосов)

Всем здравствуйте. Не для кого не секрет, что иногда я создаю сайты и в основном все они на joomla, worpdress (один раз даже на netcat) с специально разработанным дизайнером шаблоном. Ну далее верстка, настройка и т.д. Зачастую (а точнее всегда) заказчику хочется некий определенный вывод материалов или отображение контента не входящее в примитивный набор CMS. В этом случае приходится править шаблон, внося свои коррективы в программном коде, т.к. не всегда готовые модули или плагины есть в наличии или они платные (а рисковать в поисках вареза или ставить бесплатные, удаляя захешированные копирайты, ой как не хочется). Я хочу поделиться тем, что мне приходиться внедрять иногда или в той или иной степени задействовать в коде. Возможно вы ухмыльнетесь, назвав это "быдлокодингом". 

Итак, вот задача: вывести фиксированный список избранного в Joomla с разным дизайном интро-текста, причем после первых 4 материалов будет заголовок, а далее остальные избранные

Первое, что приходит в голову - это array_slice, т.к. список избранного по сути (а так и есть) - это массив, а значит его можно "разрезать" на первые 4, а потом вывести все остальные. Далее ставим див с нужным айди и работаем через тег span, чтобы в css можно было путем ntn-child присваивать значения, а чтобы все это было кросс-платформенно - через jquery (все равно библиотека подключается). Собственно вот код:

<div id="kakoetoid1" >
<div id="kakoetoid2">Заголовок 1</div>
<?php //Режем массив данных, чтобы выводились 4 материала
$inp = $this->lead_items;
$outp = array_slice($inp, 0,4);
foreach ($outp as &$item) { ?>
//вставляем span
<span class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?> " style="position: relative; float: left;">
<?php
$this->item = &$item;
echo $this->loadTemplate('item');
$document = JFactory::getDocument();
$alttitle = $this->item->params->get('alternative_readmore');
if ($alttitle) { $document->title = $alttitle; } ?>
</span>
<?php
$leadingcount++;
}
?><div id="kakoetoid3">Заголовок 2</div><?php
//вывод из массива материалов после 4го элемента
$inp2 = $this->lead_items;
$outp2 = array_slice($inp2, 4);
foreach ($outp2 as &$item2) { ?>
<span class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?> " style="position: relative; float: left;">
<?php
$this->item = &$item2;
echo $this->loadTemplate('item');
$document = JFactory::getDocument();
$alttitle = $this->item->params->get('alternative_readmore');
if ($alttitle) { $document->title = $alttitle; } ?>
</span> <?php
$leadingcount++;
} ?>

<script>
//Теперь муторно присваиваем элементам стили, на самом деле можно создать один и далее в notepad++ нажимать Ctrl+D
$("#kakoetoid2").css({"width":"936px", "height":"582px", "position":"absolute", "left":"-20px", "top":"0px", "font-weight":"bold","font-size":"16px", "text-align":"center","cursor":"default", "border":"0px"});
$("#kakoetoid1 span:nth-child(2)").css({"height":"347px", "position":"absolute", "left":"0px", "top":"30px"});
$("#kakoetoid1 span:nth-child(2) img").css({"position":"absolute", "left":"15px", "top":"0px", "float":"left"});
$("#kakoetoid1 span:nth-child(2) h3").css({"width":"200px", "text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px"});
$("#kakoetoid1 span:nth-child(2) div#intro").css({"position":"absolute","right":"15px", "top":"70px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(2) div#intro p").css({"text-indent":"0px"});
$("#kakoetoid1 span:nth-child(3)").css({"height":"162px", "position":"absolute", "border":"2px #fff solid", "left":"470px", "top":"30px" });
$("#kakoetoid1 span:nth-child(3) img").css({"position":"absolute", "left":"15px", "top":"0px", "float":"left"});
$("#kakoetoid1 span:nth-child(3) h3").css({"text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px","width":"200px"});
$("#kakoetoid1 span:nth-child(3) div#intro").css({"position":"absolute","right":"15px", "top":"40px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(3) div#intro p").css({"text-indent":"0px"});
$("#kakoetoid1 span:nth-child(4)").css({"height":"347px", "border":"2px #fff solid", "position":"absolute", "left":"470px", "top":"216px" });
$("#kakoetoid1 span:nth-child(4) img").css({"top":"0px", "float":"left", "width": "200px", "display":"table-cell","vertical-align":"bottom"});
$("#kakoetoid1 span:nth-child(4) h3").css({"width":"200px", "text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px"});
$("#kakoetoid1 span:nth-child(4) div#intro").css({"position":"absolute","right":"15px", "top":"70px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(4) div#intro p").css({"text-indent":"0px"});
$("#kakoetoid1 span:nth-child(5)").css({"height":"162px", "position":"absolute", "left":"0px", "top":"401px"});
$("#kakoetoid1 span:nth-child(5) img").css({"position":"absolute", "left":"15px", "top":"0", "float":"left"});
$("#kakoetoid1 span:nth-child(5) h3").css({"width":"200px", "text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px"});
$("#kakoetoid1 span:nth-child(5) div#intro").css({"position":"absolute","right":"15px", "top":"40px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(5) div#intro p").css({"text-indent":"0px"});
$("#kakoetoid3").css({"width":"936px", "position":"absolute", "left":"20px", "top":"583px", "font-weight":"normal", "font-size":"16px", "text-align":"left","cursor":"default", "border":"0px", "color":"#333333"});
$("#kakoetoid1 span:nth-child(7)").css({"height":"165px", "position":"absolute", "left":"0px", "top":"609px"});
$("#kakoetoid1 span:nth-child(7) img").css({"position":"absolute", "left":"15px", "top":"0", "float":"left", "width": "200", "margin-top":"40px"});
$("#kakoetoid1 span:nth-child(7) h3").css({"width":"200px", "text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px"});
$("#kakoetoid1 span:nth-child(7) div#intro").css({"position":"absolute","right":"15px", "top":"40px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(7) div#intro p").css({"text-indent":"0px"});
$("#kakoetoid1 span:nth-child(8)").css({"height":"165px", "position":"absolute", "border":"2px #fff solid", "left":"470px", "top":"609px"});
$("#kakoetoid1 span:nth-child(8) img").css({"position":"absolute", "left":"15px", "top":"0px", "float":"left"});
$("#kakoetoid1 span:nth-child(8) h3").css({"width":"200px", "text-align":"right", "margin-right":"20px", "float":"right", "z-index":"9", "font-size":"20px"});
$("#kakoetoid1 span:nth-child(8) div#intro").css({"position":"absolute","right":"15px", "top":"70px", "z-index":"9","font-size":"0.8em","text-align":"right"});
$("#kakoetoid1 span:nth-child(8) div#intro p").css({"text-indent":"0px"});
</script>
</div></div>

Я уверен абсолютно, что можно было сделать более изящно, но через абсолютное позиционирование и такое присваивание css - все получилось более чем хорошо и замечательно. На самом деле просто в начале вы все высчитываете на "бумаге", а потом уже воплощаете. Все это делается в файле default.php папки html/com_content/featured.

 И экспресс-коды

1. Вывод модуля в файле шаблона с атриббутами css стиля 

 

$attribs['style'] = 'xhtml';
foreach ($modules as $module){
echo JModuleHelper::renderModule($module, $attribs);
}

 

 2. Проверяем, если в модуле нефига нету, то ничего не выводим, если есть - выводим div с модулем (часто бывает, что модуля нет на странице, но появляется лишняя строка слоя, в которой заключен модуль).

 

if (!empty($modules1)) { 
echo '<div class="toparticle">';
foreach ($modules1 as $module1){
echo JModuleHelper::renderModule($module1);
}
echo '</div>';
}
else { echo "";
}

 

3. Считаем модули. Ну да, в общем то не в тему и глупо, но для вывода дополнительного заголовка (зачем мне это надо было - уже не помню) :-)

 

$a=count($modules);
if ($a=='0') {
echo '';
}
else {
echo 'Заголовок' };

 

4. Простая проверка модуля в индексном файле

<?=$this->countModules('bottom');?>

 

Прочитано 1620 раз Последнее изменение Воскресенье, 01 марта 2015 04:34
Другие материалы в этой категории: Системы и виды программирования »
created in 2006 year