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

+77
2.8K
На вкус и цвет все фломастеры разные.

Так выглядит обычный блог
Иллюстрация

А так, блог с шапкой
Иллюстрация

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

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


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

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

Перед самой последней закрывающейся скобкой } вставить
  1. function getAvatar($auth){
  2. $sql = "SELECT imageurl FROM cms_user_profiles WHERE user_id='$auth' LIMIT 1";
  3. $result = $this->inDB->query($sql);
  4. $author = $this->inDB->fetch_assoc($result);
  5. $avatar ='/images/users/avatars/nopic.jpg';
  6. if(!empty($author[imageurl])){
  7. if(file_exists('images/users/avatars/'.$author[imageurl])){
  8. $avatar='/images/users/avatars/'.$author[imageurl];
  9. }
  10. }
  11. return "<img style='max-width:150px; max-height:150px' src='$avatar' />";
  12. }
  13. function getAvatarClub($club_id){
  14. $sql = "SELECT imageurl FROM cms_clubs WHERE id='$club_id' LIMIT 1";
  15. $result = $this->inDB->query($sql);
  16. $author = $this->inDB->fetch_assoc($result);
  17. $avatar ='';
  18. if(!empty($author[imageurl])){
  19. if(file_exists('images/clubs/'.$author[imageurl])){
  20. $avatar='/images/clubs/'.$author[imageurl];
  21. }
  22. }
  23. return "<img style='max-width:150px; max-height:150px' src='$avatar' />";;
  24. }
  25. function getClubMember($club_id){
  26. if (!$club_id) { exit; }
  27. $members = array();
  28. $sql = "SELECT c.user_id
  29. FROM cms_user_clubs c
  30. WHERE c.club_id = '$club_id' AND c.role = 'member'";
  31. $result = $this->inDB->query($sql);
  32. return $this->inDB->num_rows($result);
  33. }
  34. function getDeco($id,$owner){
  35. if ($owner=='user'){$ur= $id;}
  36. else {$sql = "SELECT admin_id
  37. FROM cms_clubs
  38. WHERE id='$id' LIMIT 1";
  39. $result = $this->inDB->query($sql);
  40. $idmin=$this->inDB->fetch_assoc($result);
  41. $ur= $idmin['admin_id'];
  42. }
  43. $sql = "SELECT user_id
  44. FROM cms_user_awards
  45. WHERE user_id='$ur' AND title='Золотое перо'";
  46. $result = $this->inDB->query($sql);
  47. $award= $this->inDB->num_rows($result);
  48. $deco['head']=$deco['foot']='/templates/_default_/images/bg.jpg';
  49. if ($award){
  50. $lin='upload/userfiles/'.$ur.'/bloghead.jpg';
  51. if(file_exists($lin)){$deco['head']='/'.$lin;}
  52. $lin='upload/userfiles/'.$ur.'/blogfoot.jpg';
  53. if(file_exists($lin)){$deco['foot']='/'.$lin;}
  54. else {$deco['foot']=$deco['head'];}
  55. }
  56. return $deco;
  57. }
  58. function getPostsRating($blog_id){
  59. $sql = "SELECT SUM(r.total_rating) AS rating, SUM(r.total_votes) AS votes
  60. FROM cms_ratings_total r
  61. LEFT JOIN cms_blog_posts p ON p.id = r.item_id
  62. WHERE p.blog_id = $blog_id AND r.target = 'blogpost'";
  63. $result = $this->inDB->query($sql);
  64. $post = $this->inDB->num_rows($result) ? $this->inDB->fetch_assoc($result) : false;
  65. return $post;
  66. }
Я бы с удовольствием спрятал этот код под spoiler но тогда бьется формат php


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

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

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

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


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

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

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

а в конце файла еще один див-футер
с background: url({$deco.foot})

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

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

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


Как дать права блогеру на оформление своего блога:
Я долго думал, как и кому давать права
— Всем? Но тогда блог превратиться в трудночитаемый калейдоскоп.
— Заносить блогера в специальную группу редакторов? Но ведь он может уже состоять в какой-то группе, а система не предусматривает несколько групп для одного юзера.
— Разрешить всем кто достиг какого-то рейтинга? Но ведь может так быть что выдать права надо новому человеку, и наоборот набивший рейтинг — неадекват.
— Внести в таблицу юзеров БД еще одно поле? Некрасиво

И тут вспомнил про систему наград
И решил назначить награду "Золотое перо", которую выдавать лучшим блогерам с правом оформления блога.
А если кто пожелает выдавать награду-право за рейтинг — без проблем, указываем в настройках награды выдаваться автоматически при достижении заданного рейтинга, кармы и количества постов.
Иллюстрация

Как пользователю оформить свою шапку
Если у пользователя есть права на оформление, он может просто залить в свои файлы
картинки с названием bloghead.jpg и blogfoot.jpg и они станут подложкой блога.

Цена
Разработка бесплатная,
но буду рад финансовой благодарности.
Z625314341204
0
Настёна Настёна 13 лет назад #
Интересно. Сейчас попробую.
0
reload reload 13 лет назад #
Max, одни положительные эмоции!)
+ попробуем потестить
зы: понравилось как ты добавил кошелек) национальная валюта, че, не канает?) или есть информация о большой инфляции?)
+1
Telema93 Telema93 13 лет назад #
правильно сделал, тут не только из России люди же smile а вмз не менее популярны, как универсальная валюта
0
Maximov Maximov 13 лет назад #
На счет инфляции мне ничего не известно.
Просто сегодня Z более универсальная валюта.
По крайней для меня - Украинца. )
+2
Telema93 Telema93 13 лет назад #
Идея замечательная! Развить бы дальше, чтоб не загружали фон, а брали из стандартного набора, а то личный фон только создаст неровности и т.п. Можно долго не перебирая: стандартный фон, и 2 по градации мальчик-девочка, таких, чтоб выделялись.
Кстати, я за то, чтоб внести в стандартную сборку такое опционально - захотел - включил, не захотел - отключил.
+2
Maximov Maximov 13 лет назад #
Безусловно буду развивать, надо только накопить таких вот полезных идей.
0
Katerina Katerina 13 лет назад #
Спасибо, Max.
Скажи, а на отдельных записях в блоге он показывается? Или только в ленте блога.
Клубные фото вместо аватаров можно вставить?
0
Maximov Maximov 13 лет назад #
Шапка есть и на отдельных записях.


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

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

Также и с названием...
0
Katerina Katerina 13 лет назад #
Спасибо.
На выходных опробую, отпишусь, оплачу.
0
Настёна Настёна 13 лет назад #
в клубах почему-то у меня изображение только на половину шапки
0
Настёна Настёна 13 лет назад #
0
Денис Васильевич Денис Васильевич 13 лет назад #
А вы в стилях разрешите горизонтальное повторение фона. И будет все хорошо и для тех кто загрузит подложку достаточной ширины и у тех кто загрузит подложку недостаточной ширины для покрытия фона по всей ширине.

в файле 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
0
Денис Васильевич Денис Васильевич 13 лет назад #
и повторите действие в файле com_blog_view_post.tpl
0
Настёна Настёна 13 лет назад #
Извиняюсь за описку, в блогах
0
Maximov Maximov 13 лет назад #
А длина картинки достаточная?

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

А файлы шаблон сами меняли или вставляли скаченные?
0
Настёна Настёна 13 лет назад #
Файлы вставляла из примера приведенных файлов, сейчас еще раз попробую. Спасибо.
0
Maximov Maximov 13 лет назад #
Проверьте ширину залитого файла для фона.
0
Настёна Настёна 13 лет назад #
Все, работает, спасибо. Действительно просто картинка была маленькая и все.
0
lezginka.ru lezginka.ru 13 лет назад #
+
0
Александр Александр 13 лет назад #
Здорово, а для клубов также можно сделать чтоб шапки свои были?
+1
Maximov Maximov 13 лет назад #
Впринципе можно, если будет востребовано.
0
Джехутимери Джехутимери 13 лет назад #
Спасибо большое, все работает на ура!
0
NIKITA NIKITA 13 лет назад #
Можно подробнее об этом - пример для дефолта
"Описать подробно, что куда вставить не представляется возможным - у всех ведь шаблоны разные.

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

а в конце файла еще один див-футер
с background: url({$deco.foot})"
0
NIKITA NIKITA 13 лет назад #
В примере
0
Maximov Maximov 13 лет назад #
Для примера в архиве есть готовые файлы дефолтного шаблона.
0
NIKITA NIKITA 13 лет назад #
загрузил картинки с названиями bloghead.jpg и blogfoot.jpg а фон не изменился. Остался стандартным.
+5
Maximov Maximov 13 лет назад #
Тем у кого нет прав грузиться стандартный фон.
Что грузить по умолчанию прописано в файле /components/blogs/model.php
в строке
Код PHP:
$deco['head']=$deco['foot']='/templates/_default_/images/bg.jpg';
Как давать права написано в теме.
+1
NIKITA NIKITA 13 лет назад #
Спасибо!+
0
Azura Azura 12 лет назад #
Какая прелесть!!!!)))) Спасибо большое!!!!)))
+2
spacer spacer 12 лет назад #
Доброго дня.
Вы продвинулись с добавлением списка фонов для выбора пользователем?
0
Александр Александр 12 лет назад #
Тоже интересует данный момент
0
Igor Igor 12 лет назад #
очень хорошая наработка - будет ли работать на 1,9?
0
Helg Helg 12 лет назад #
Закинул файлы в 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
+1
SE7EN SE7EN 11 лет назад #
можете адаптировать для 1.10.1 ?
0
Капитан Капитан 10 лет назад #
Я к сожалению на 1.10.1 вообще никаких "украшательств" для блогов не нашел sad Если о таких кто-то знает - поделитесь пожалуйста!
+3
Доротея Доротея 10 лет назад #
Такую же шапку бы в Профиль пользователя! Что бы как в Фейсбук можно было менять обложку!
Можно вывод шапки с помощью модуля. Не обязательно через ядро)
Думаю много кто скинется на доработку.
+2
Доротея Доротея 10 лет назад #
Под 1.10.4 будет шапка?

Еще от автора

Вставка видео с YouTube одной строкой (1.10.3)
- Всегда волнуюсь, когда красная полоска на YouTube догоняет серую. (с) Плагин заменяет ссылку на видео с YouTube кодом плеера.
Вывод рекламного блока в статье (v1.10.3)
В нашем медицинском справочнике - только самые лучшие болезни. © Плагин вставляет код рекламы внутри контента.
Автоматическая вставка фотографий альбома в статьи и блоги (v1.10.3)
"Сходил на фотоохоту, завалил 7 горизонтов.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.