Столкнулся с необходимостью создать возможность загружать фото для записей блога, как в статьях например.
Как всегда, делюсь описанием с обществом. Работы совсем немного. Описываю решение для 1.10, для ранних версий тоже подойдет, но работы там побольше.
После правки компонента, мы имеем возможность назначать фото для каждого поста в блоге, если фото нет то выводится заглушка. Размер картинки я установил 150х150 пикс., это можно изменить ниже в коде. Если менять картинку, то старая удаляется с сервера.
И так, приступим.
Первое правило — обязательно создать бэкап, если правите рабочий сайт.
Открываем файл \components\blogs\frontend.php
Находим текстПосле него вставляем Дальше перед строчкой Вставляем Открываем файл \core\classes\blog.class.php
Находим функциюи в запрос $sql = "SELECT p.*, после слова blog_allow_who, добавляем f.image,
после строчки LEFT JOIN cms_users u ON u.id = p.user_id
вставляем LEFT JOIN cms_blogs_photos f ON f.blog_id = p.id
Перед $posts[] = $post;
Вставляем $post['image']=$post['image']?'/images/blogs/'.$post['image']:'/images/nopic.jpg';
Находим функциюв запрос $sql = "SELECT p.*, после слова author_image, добавляем f.image,
после строчки LEFT JOIN cms_user_profiles up ON up.user_id = u.id
вставляем LEFT JOIN cms_blogs_photos f ON f.blog_id = p.id
перед return cmsCore::callEvent('GET_POST', $post);
вставляем $post['image']=$post['image']?'/images/blogs/'.$post['image']:'/images/nopic.jpg';
Открываем файл com_blog_view.tpl
перед словом {$post.content_html} вставляем
Открываем файл com_blog_view_posts.tpl
перед словом {$post.content_html} вставляем
Открываем файл com_blog_view_post.tpl
перед словом {$post.content_html} вставляем
Открываем файл com_blog_edit_post.tpl
после блокавставляем Теперь осталось лишь создать таблицу в базе, для этого выполним запрос в базу
Также надо в папку /images закинуть картинку заглушку для постов без картинки с именем nopic.jpg
Вроде все. Может кому то и пригодится. Если вы не разбираетесь в коде, или не хотите рыться в коде, пишите в личку, за символическое вознаграждение могу установить все сам :)
Как всегда, делюсь описанием с обществом. Работы совсем немного. Описываю решение для 1.10, для ранних версий тоже подойдет, но работы там побольше.
После правки компонента, мы имеем возможность назначать фото для каждого поста в блоге, если фото нет то выводится заглушка. Размер картинки я установил 150х150 пикс., это можно изменить ниже в коде. Если менять картинку, то старая удаляется с сервера.
И так, приступим.
Первое правило — обязательно создать бэкап, если правите рабочий сайт.
Открываем файл \components\blogs\frontend.php
Находим текст
// Если есть ошибки, возвращаемся назад if($errors){ cmsUser::sessionPut('mod', $mod); cmsCore::redirectBack(); }
if ($_FILES['image']['size']) { $uploaddir = PATH . '/images/blogs/'; { } $realfile = $_FILES['image']['name']; if ($ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png' && $ext != 'bmp') { } $uploadfile = $uploaddir . $filename; $inCore->includeGraphics(); @img_resize($uploadfile, $uploadfile, 125, 125, false); { if ($do=='editpost') { $check = $inDB->rows_count('cms_blogs_photos', 'blog_id = '.$post[id]); if ($check) { $inDB->query("UPDATE cms_blogs_photos SET image='$filename' WHERE blog_id = '$post[id]'");} else { $inDB->query("INSERT INTO cms_blogs_photos (image, blog_id) VALUES ('$filename','$post[id]')"); } } } }
cmsCore::addSessionMessage($_LANG['POST_CREATED'], 'success');
$inDB->query("INSERT INTO cms_blogs_photos (image, blog_id) VALUES ('$filename','$added[id]')");
Находим функцию
public function getPosts($show_all = false, $ownerModel, $is_short = false){
после строчки LEFT JOIN cms_users u ON u.id = p.user_id
вставляем LEFT JOIN cms_blogs_photos f ON f.blog_id = p.id
Перед $posts[] = $post;
Вставляем $post['image']=$post['image']?'/images/blogs/'.$post['image']:'/images/nopic.jpg';
Находим функцию
public function getPost($id_or_link=0){
после строчки LEFT JOIN cms_user_profiles up ON up.user_id = u.id
вставляем LEFT JOIN cms_blogs_photos f ON f.blog_id = p.id
перед return cmsCore::callEvent('GET_POST', $post);
вставляем $post['image']=$post['image']?'/images/blogs/'.$post['image']:'/images/nopic.jpg';
Открываем файл com_blog_view.tpl
перед словом {$post.content_html} вставляем
<img src="{$post.image}" align="left" style="padding:5px;">
Открываем файл com_blog_view_posts.tpl
перед словом {$post.content_html} вставляем
<img src="{$post.image}" align="left" style="padding:5px;">
Открываем файл com_blog_view_post.tpl
перед словом {$post.content_html} вставляем
<img src="{$post.image}" align="left" style="padding:5px;">
Открываем файл com_blog_edit_post.tpl
после блока
<tr> <td valign="top"> <strong>{$LANG.TAGS}:</strong> </td> <td> <input name="tags" class="text-input" type="text" id="tags" style="width:400px" value="{$mod.tags|escape:'html'}"/> <span class="hinttext" style="font-size:11px">{$LANG.KEYWORDS}</span> <script type="text/javascript"> {$autocomplete_js} </script> </td> </tr>
<tr> <td><strong>Фото:</strong></td> <td> <input name="image" id="image" type="file" size="34" /></td> </tr>
CREATE TABLE IF NOT EXISTS `cms_blogs_photos` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `blog_id` INT(11) NOT NULL, `image` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Вроде все. Может кому то и пригодится. Если вы не разбираетесь в коде, или не хотите рыться в коде, пишите в личку, за символическое вознаграждение могу установить все сам :)
Реклама #
Kreator 11 лет назад #
А так, чем это лучше, чем просто вставить фотку в блог? тем что текст обтекает?
deltas 11 лет назад #
И еще модуль для последних записей блогов теперь может показывать картинку поста (после небольшой доработки).
Kreator 11 лет назад #
Я как то задумывался над такой идеей, только хотел дополнительный ббкод картики с обтеканием.
Ну это тож явно не спроста. Многим пригодится.
+
lokanaft 11 лет назад #
Тоже возникла такая потребность, но я реализовывать буду совсем иначе - примерно как Join описал)
lezginka.ru 11 лет назад #
picaboo 11 лет назад #
небольшая просьба. легче читать когда
[code=html
[code=php
[code=sql
[code=js
не сочтите за наглость, но ведь и парсер пожрать может чего в запросах, а так выживут.
deltas 11 лет назад #
Денис Васильевич 11 лет назад #
ссылка
ссылка2
deltas 11 лет назад #
Денис Васильевич 11 лет назад #
просто прочитав сообщение Join и lokanaft решил дать ссылки на то что делал когда-то..
п.с. это скорее я не к месту свои ссылки опубликовал.. не серчайте, если что :)
picaboo 11 лет назад #
Def 11 лет назад #
Сергей Петрович 11 лет назад #
lokanaft 11 лет назад #
+1 к вопросу, действительно, почему?
Максим Шорин 11 лет назад #
deltas 11 лет назад #
deltas 11 лет назад #
lokanaft 11 лет назад #
alexbabo 11 лет назад #
deltas 11 лет назад #
alexbabo 11 лет назад #
{if $post.image}
<img src="{$post.image}" align="left" style="padding:5px;">
{/if}
Если нету картники то ничего не выводим.
toropa 11 лет назад #
Петр 11 лет назад #
А можно архивом просто заменой файлов?
Ну или плагином?
Apsent 9 лет назад #