Шапки блогов (хак)

1879
На вкус и цвет все фломастеры разные.

Так выглядит обычный блог
Спойлер

А так, блог с шапкой
Спойлер

У шапки блога есть подложка, в ней кроме прежних данных есть
- крупный аватар владельца блога,
- количество записей в блоге,
- суммарный рейтинг блогов,
- общее количество голосов.

А самое главное – теперь достойные блогеры могут получить право менять подложку на свою!


Для того чтобы установить хак надо

В файле /components/blogs/model.php

Перед самой последней закрывающейся скобкой } вставить
Код PHP:
function getAvatar($auth){
	$sql = "SELECT imageurl FROM cms_user_profiles WHERE user_id='$auth' LIMIT 1";
	$result = $this->inDB->query($sql);
	$author = $this->inDB->fetch_assoc($result);
	$avatar ='/images/users/avatars/nopic.jpg';
	if(!empty($author[imageurl])){
	if(file_exists('images/users/avatars/'.$author[imageurl])){
	$avatar='/images/users/avatars/'.$author[imageurl];
    	}
    }
    return "<img style='max-width:150px; max-height:150px' src='$avatar' />";
}
function getAvatarClub($club_id){
	$sql = "SELECT imageurl FROM cms_clubs WHERE id='$club_id' LIMIT 1";
	$result = $this->inDB->query($sql);
	$author = $this->inDB->fetch_assoc($result);
 	$avatar ='';
	if(!empty($author[imageurl])){
  		if(file_exists('images/clubs/'.$author[imageurl])){
              $avatar='/images/clubs/'.$author[imageurl];
    	}
    }
    return "<img style='max-width:150px; max-height:150px' src='$avatar' />";;
}
function getClubMember($club_id){
	if (!$club_id) { exit; }
	$members = array();
	$sql = "SELECT c.user_id
			FROM cms_user_clubs c
			WHERE c.club_id = '$club_id' AND c.role = 'member'";
	$result = $this->inDB->query($sql);
	return $this->inDB->num_rows($result);
}
function getDeco($id,$owner){
	if ($owner=='user'){$ur= $id;}
	else {$sql = "SELECT admin_id
				FROM cms_clubs
				WHERE id='$id' LIMIT 1";
		$result = $this->inDB->query($sql);
		$idmin=$this->inDB->fetch_assoc($result);
	    $ur= $idmin['admin_id'];
    }
    $sql = "SELECT user_id
			FROM cms_user_awards
			WHERE user_id='$ur' AND title='Золотое перо'";
    $result = $this->inDB->query($sql);
	$award= $this->inDB->num_rows($result);
	$deco['head']=$deco['foot']='/templates/_default_/images/bg.jpg';
	if ($award){
		$lin='upload/userfiles/'.$ur.'/bloghead.jpg';
		if(file_exists($lin)){$deco['head']='/'.$lin;}
		$lin='upload/userfiles/'.$ur.'/blogfoot.jpg';
		if(file_exists($lin)){$deco['foot']='/'.$lin;}
		else {$deco['foot']=$deco['head'];}
	}
	return $deco;
}
function getPostsRating($blog_id){
	$sql = "SELECT SUM(r.total_rating) AS rating, SUM(r.total_votes) AS votes
			FROM cms_ratings_total r
			LEFT JOIN cms_blog_posts p ON p.id = r.item_id
            WHERE p.blog_id = $blog_id AND r.target = 'blogpost'";
    $result = $this->inDB->query($sql);
    $post = $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;
    return $post;
}
Я бы с удовольствием спрятал этот код под spoiler но тогда бьется формат php


В файле /components/blogs/frontend.php

Находим часть
Код PHP:
if ($do=='blog'){
и чуть ниже находим строку
Код PHP:
if($owner=='user'){
и после нее вставляем
Код PHP:
$avatar=$model->getAvatar($blog['user_id']);
находим чуть ниже в этом же разделе строку
Код PHP:
if ($owner=='club'){
и следом за ней вставляем
Код PHP:
$ClubMember=   $model->getClubMember($blog['user_id'])+1;
$avatar=$model->getAvatarClub($blog['user_id']);
Находим в этом же разделе строку
Код PHP:
$smarty->assign('myblog', $myblog);
и после вставляем
Код PHP:
$ratings=$model->getPostsRating($blog['id']);
$deco=$model->getDeco($blog['user_id'],$owner); 	
$smarty->assign('deco', $deco);
$smarty->assign('clubmembers', $ClubMember);
$smarty->assign('ratings', $ratings);
$smarty->assign('avatar', $avatar);

Далее переходим к другой части файла

для этого находим строку
Код PHP:
if($do=='post'){
и чуть ниже в этом же разделе строку
Код PHP:
$smarty = $inCore->initSmarty('components', 'com_blog_view_post.tpl'); 
после которой ставим
Код PHP:
$avatar=$model->getAvatar($post['author_id']);
$deco=$model->getDeco($blog['user_id'],$owner);
$smarty->assign('deco', $deco);
$smarty->assign('avatar', $avatar);


С программной частью закончили - дальше работа с шаблонами
Спойлер

В приложенном архиве в качестве примера
два файла дефолтного шаблона
/templates/_default_/components/com_blog_view.tpl
/templates/_default_/components/com_blog_view_post.tpl

там же есть измененные файлы
/components/blogs/model.php
/components/blogs/frontend.php
с чистой версии instantcms

Внимание, если вы решите заменить свои файлы файлами из архива,
сделайте сначала копию оригиналов!


Как дать права блогеру на оформление своего блога:
Спойлер

Как пользователю оформить свою шапку
Спойлер

Цена
Спойлер
Модуль для конкурсов в блогах | Небольшой хак компонента закладок
Комментарии (40)
Настёна 22 октября 2011 в 05:44 0
Интересно. Сейчас попробую.
reload 22 октября 2011 в 06:15 0
Max, одни положительные эмоции!)
+ попробуем потестить
зы: понравилось как ты добавил кошелек) национальная валюта, че, не канает?) или есть информация о большой инфляции?)
Telema93 22 октября 2011 в 06:35 +1
правильно сделал, тут не только из России люди же smile а вмз не менее популярны, как универсальная валюта
Maximov 22 октября 2011 в 09:23 0
На счет инфляции мне ничего не известно.
Просто сегодня Z более универсальная валюта.
По крайней для меня - Украинца. )
Telema93 22 октября 2011 в 06:44 +2
Идея замечательная! Развить бы дальше, чтоб не загружали фон, а брали из стандартного набора, а то личный фон только создаст неровности и т.п. Можно долго не перебирая: стандартный фон, и 2 по градации мальчик-девочка, таких, чтоб выделялись.
Кстати, я за то, чтоб внести в стандартную сборку такое опционально - захотел - включил, не захотел - отключил.
Maximov 22 октября 2011 в 09:09 +2
Безусловно буду развивать, надо только накопить таких вот полезных идей.
Katerina 22 октября 2011 в 07:16 0
Спасибо, Max.
Скажи, а на отдельных записях в блоге он показывается? Или только в ленте блога.
Клубные фото вместо аватаров можно вставить?
Maximov 22 октября 2011 в 09:17 0
Шапка есть и на отдельных записях.


И в клубных блогах. Вместо аватарки берется картинка группы.
Katerina 22 октября 2011 в 09:39 0
То есть вместо названия блога - появляется название записи, которое может занять 5 и более строчек и шапка растянется на весь экран...

Нельзя ли в записи блога оставить шапку, как в общей ленте, а поля "опубликовано", "рубрика", "Редактировалось" и "рейтинг" оставить под шапкой?
Katerina 22 октября 2011 в 10:01 0
И название заметки - тоже под шапкой.
Maximov 22 октября 2011 в 10:38 0
Можно все. Это задается в файле шаблона com_blog_view_post.tpl
Схематично шапка выглядит так:
Код PHP:
<div><!--//Открываем шапку, задаем ее стиль //-->
	<table><!--//Открываем Таблицу//-->
		<tr><!--//Открываем новый ряд таблицы//-->
			<td>
			<!--//Первая ячейка таблицы - в ней отображение аватара//-->
			</td>
			<td>
			<!--//Вторая ячейка таблицы - в ней данные поста //-->    
				<!--//Название поста в <H1> //-->
				<!--//Автор, рубрика и пр данные заголовка, если есть //-->   
			</td>
			<td >     
			<!--//Третья ячейка таблицы //-->
				<!--//Значок rss, окошко кармы, инструменты администрирования//-->
			</td>  
        </tr>
   </table>
<div><!--//"Закрыли шапку" //-->
Если есть желание писать "опубликовано", "рубрика" и пр. под шапкой - Надо просто вырезать код со второй ячейки и вставить после закрытия div'a шапки.

Также и с названием...
Katerina 22 октября 2011 в 10:57 0
Спасибо.
На выходных опробую, отпишусь, оплачу.
Настёна 22 октября 2011 в 09:20 0
в клубах почему-то у меня изображение только на половину шапки
Настёна 22 октября 2011 в 09:21 0
GoodMade.ru 22 октября 2011 в 16:09 0
А вы в стилях разрешите горизонтальное повторение фона. И будет все хорошо и для тех кто загрузит подложку достаточной ширины и у тех кто загрузит подложку недостаточной ширины для покрытия фона по всей ширине.

в файле com_blog_view.tpl в строчке
Код PHP:
<div style="background: url({$deco.head}) no-repeat top left; width: 100%; height: 180px; padding:0px; border: 0px solid rgb(0, 0, 0); -moz-border-radius: 10px 10px 0px 0px;">
no-repeat замените на repeat-x
GoodMade.ru 22 октября 2011 в 16:13 0
и повторите действие в файле com_blog_view_post.tpl
Настёна 22 октября 2011 в 09:23 0
Извиняюсь за описку, в блогах
Maximov 22 октября 2011 в 09:26 0
А длина картинки достаточная?

Лучше всего заглянуть в исходник страницы этого блога.
Думаю, там все станет ясно.

А файлы шаблон сами меняли или вставляли скаченные?
Настёна 22 октября 2011 в 09:40 0
Файлы вставляла из примера приведенных файлов, сейчас еще раз попробую. Спасибо.
Maximov 22 октября 2011 в 10:40 0
Проверьте ширину залитого файла для фона.
Настёна 22 октября 2011 в 10:42 0
Все, работает, спасибо. Действительно просто картинка была маленькая и все.
lezginka.ru 22 октября 2011 в 15:34 0
+
Александр 23 октября 2011 в 02:17 0
Здорово, а для клубов также можно сделать чтоб шапки свои были?
Maximov 23 октября 2011 в 03:52 +1
Впринципе можно, если будет востребовано.
Джехутимери 23 октября 2011 в 16:54 0
Спасибо большое, все работает на ура!
NIKITA 24 октября 2011 в 13:27 0
Можно подробнее об этом - пример для дефолта
"Описать подробно, что куда вставить не представляется возможным - у всех ведь шаблоны разные.

Скажу в общем:
Надо верху вставить DIV у которого в стиле будет указан адрес фона
background: url({$deco.head})
внутри этого дива-шапки ставим таблицу (ну или div - кому как нравиться)
куда встраиваем полученные переменные
{$avatar} - аватар владельца блога
{$ratings.rating} - Сумма рейтинга всех записей (только для com_blog_view.tpl)
{$ratings.votes} - Общее количество голосов (только для com_blog_view.tpl)

а в конце файла еще один див-футер
с background: url({$deco.foot})"
NIKITA 24 октября 2011 в 14:29 0
В примере
Maximov 24 октября 2011 в 14:59 0
Для примера в архиве есть готовые файлы дефолтного шаблона.
NIKITA 24 октября 2011 в 21:03 0
загрузил картинки с названиями bloghead.jpg и blogfoot.jpg а фон не изменился. Остался стандартным.
Maximov 24 октября 2011 в 23:53 +5
Тем у кого нет прав грузиться стандартный фон.
Что грузить по умолчанию прописано в файле /components/blogs/model.php
в строке
Код PHP:
$deco['head']=$deco['foot']='/templates/_default_/images/bg.jpg';
Как давать права написано в теме.
NIKITA 25 октября 2011 в 00:25 +1
Спасибо!+
Azura 11 марта 2012 в 01:07 0
Какая прелесть!!!!)))) Спасибо большое!!!!)))
spacer 14 марта 2012 в 14:46 +2
Доброго дня.
Вы продвинулись с добавлением списка фонов для выбора пользователем?
Александр 31 марта 2012 в 20:29 0
Тоже интересует данный момент
Igor 20 апреля 2012 в 17:49 0
очень хорошая наработка - будет ли работать на 1,9?
Helg 1 мая 2012 в 19:35 0
Закинул файлы в 1.9 выдает вот что при создании пользователем блога
Warning: Smarty error: unable to read resource: "com_blog_create_ok.tpl" in /home/wm17235/domains/lesozavodsk25.ru/public_html/includes/smarty/libs/Smarty.class.php on line 1092
SE7EN 17 марта 2013 в 21:43 +1
можете адаптировать для 1.10.1 ?
Капитан 23 февраля 2014 в 03:38 0
Я к сожалению на 1.10.1 вообще никаких "украшательств" для блогов не нашел sad Если о таких кто-то знает - поделитесь пожалуйста!
Доротея 21 августа 2014 в 22:06 +3
Такую же шапку бы в Профиль пользователя! Что бы как в Фейсбук можно было менять обложку!
Можно вывод шапки с помощью модуля. Не обязательно через ядро)
Думаю много кто скинется на доработку.
Доротея 12 октября 2014 в 22:55 +2
Под 1.10.4 будет шапка?