[Инфо] Добавление к новости изображения

HeadHunter

Shop Script
Регистрация
21 Июн 2011
Сообщения
629
Реакции
276
Предистория. Разрабатывал значит я один магазин, и по тз было задание, чтобы к новости добавлять изображение. Думал что функционал должен быть, а нет. Оказалось что в коде он есть (корявый до ужаса и не рабочий) а в админке не выведен. Обычное добавление изображение в тексте новости через редактор не прокатывал, так как толком и сверстать страницу нельзя было.

Теперь по теме.

1. Открываем файл published/SC/html/scripts/templates/backend/news_add.html находим там

Код:
<tr>
    <td>{"blog_post_title"|translate} <span class="notice">({"blog_str_not_html"|translate})</span>:</td>
    <td>
        {*<input type=text name='DATA[title]' value='{$NewsInfo.title}' size="50" />*}
        {html_text namespace="DATA" name="title" values=$NewsInfo table=$smarty.const.PRODUCTS_TABLE style="width:100%"}
    </td>
</tr>

ниже вставляем
Код:
<tr>
    <td align="left" valign="top">Изображение</td>
    <td>
        <input type="file" name="DATA[picture]" />
    </td>
</tr>

сохраняем в кодировке utf-8 без BOM

2. Открываем файл published/SC/html/scripts/modules/news/class.newsmodule.php

Ищем

Код:
case 'ADD_NEWS':

и ниже вставляем
Код:
                    $picture = "";
                    if ( $_FILES["DATA"]["size"]["picture"]!=0 && is_image($_FILES["DATA"]["name"]["picture"]))
                    {
                        $res = Functions::exec('file_move_uploaded', array($_FILES["DATA"]["tmp_name"]["picture"], DIR_PRODUCTS_PICTURES."/".$_FILES["DATA"]["name"]["picture"] ));
                        if(PEAR::isError($res))Message::raiseMessageRedirectSQ(MSG_ERROR, '', $res->getMessage());
 
                        $picture = $_FILES["DATA"]["name"]["picture"];
                        SetRightsToUploadedFile( DIR_PRODUCTS_PICTURES."/".$picture );
                    }
 
                    if ( !file_exists(DIR_PRODUCTS_PICTURES."/".$picture) )
                        $picture = "";
 
                    $_POST['DATA']['picture'] = $picture?$picture:'';
                    if(!$_POST['DATA']['picture'])unset($_POST['DATA']['picture']);

сохраняем

3. Для отображения изображения в админке при просмотре всех новостей

открываем published/SC/html/scripts/templates/backend/news.admin_list.tpl.html

ищем
Код:
 {if $news_posts[i].picture_exists}
<img src="{$smarty.const.URL_PRODUCTS_PICTURES}/{$_news.picture}" hspace="20" vspace="20" align="left" />
{/if}

меняем на
Код:
{if $news_posts[0].picture_exists}
<img src="{$smarty.const.URL_PRODUCTS_PICTURES}/{$_news.picture}" hspace="20" vspace="20" align="left" />
{/if}

4. Загружаем изображение на сервер и записываем в БД.
Открываем файл published/SC/html/scripts/templates/backend/news_add.html находим там

Код:
<form action="{''|set_query_html}" method="POST" name='MainForm'>

меняем на
Код:
<form action="{''|set_query_html}" method="POST" name='MainForm' enctype="multipart/form-data">


Вот в принципе и все. Единственное что не работает толком, так это загрузка нового или удаление старого изображения при редактировании новости. Кто поможет буду благодарен
 
Спасибо, хороший пост. Можно Вас попросить показать сайт, где это работает? Вроде все и стало, но вылазит какой-то глюк, пока не разобрался. В принципе, если копировать верстку в WYSIWNG-редактор, то с картинками проблем нет, и не надо дополнительного функционала. Основной момент, что редко этот способ подходит для заказчиков, так как менеджеры магазина не всегда обладают базовыми знаниями HTML.
 
Спасибо, хороший пост. Можно Вас попросить показать сайт, где это работает? Вроде все и стало, но вылазит какой-то глюк, пока не разобрался. В принципе, если копировать верстку в WYSIWNG-редактор, то с картинками проблем нет, и не надо дополнительного функционала. Основной момент, что редко этот способ подходит для заказчиков, так как менеджеры магазина не всегда обладают базовыми знаниями HTML.

Для спасибо есть кнопка "Мне нравится"

Какой глюк вылазит? Причем тут вообще верстка вставленная в редактор? Данная доработка служит для того, чтобы админ мог добавлять без проблем изображение к новости. Обычное выравнивание не прокатывало. Шаблон вывода новости верстается по дизайну.
 
У меня почему-то не работает...
При сохранении новости - не загружает изображение и не добавляет его в таблицу новостей :( (саму новость сохраняет)
Уже все перепроверил, пересмотрел...
Может кто подскажет, что конкретно и где надо еще посмотреть
 
И еще один вопрос:
Хочу сделать отправку новости подписчикам в красивом дизайне (с HTML кодом)
За отправку новости отвечает файл /tottys.ru/public_html/published/SC/html/scripts/modules/news/class.newsmodule.php
в частности строка, которая вставляет текст в письмо:
PHP:
$News["textToMail"]."<br />".translate("email_bestregards").", ".CONF_HOMEPAGE_META_KEYWORDS.CONF_SHOP_NAME."<br />".CONF_SHOP_URL,
Я создал два файла: heder.txt - в этом файле лежит код, который необходимо вставить перед текстом новости
futer.txt - в этом файле лежит код, который необходимо вставить после текста новости
Положил их в: ......SC/html/scripts/templates/email/

ВОПРОС: как сделать, чтобы текст письма выглядел как: heder.txt + textToMail + futer.txt
Или было бы вообще супер, если подскажете как обойтись без двух файлов и сделать отправку шаблона (как при заказе/регистрации и т.д..)
3 часа ковыряний и экспериментов результата не дали :(

Буду очень благодарен за ответ.
 
Так как все молчат и ни кто не хочет помочь - сделал тупо:
В таблицу базы "SC_settings" добавил строки с значениями: CONF_MAIL_HED (в нем хранится то, что выводится перед текстом новости) и CONF_MAIL_FUTER (то, что выводится после текста новости)
в файле published/SC/html/scripts/modules/news/class.newsmodule.php
после $News = db_fetch_assoc(db_query($sql)); добавил:
$HD = CONF_MAIL_HED;
$FT = CONF_MAIL_FUTER;
строку $News["textToMail"], заменил на: $News["textToMail"]?$HD. $News["textToMail"]. $FT: "",

Конешно не самое лучшее решение, но работает.....
 
У меня почему-то не работает...
При сохранении новости - не загружает изображение и не добавляет его в таблицу новостей :( (саму новость сохраняет)
Уже все перепроверил, пересмотрел...
Может кто подскажет, что конкретно и где надо еще посмотреть

Тоже сам разобрался
Необходимо было убрать $picture = ""; - встречается дважды в части кода добавления изображения.
Теперь имя изображения записывается в таблицу.
Сейчас проблема в том, что само изображение не загружается в указанную папку.
На сколько я полнял - почему-то не срабатывает функция file_move_uploaded
подскажите пожалуйста, где копать
 
Обновил первый пост. Добавил 4 пункт. Также ниже добавил архив со всеми уже измененными файлами. В архиве сохранены пути, так что просто копируем содержимое архива в корень сайта

P.S. Файлы от 306 версии. Перед заменой файлов делайте бекапы.
 

Вложения

  • Изображение у новости.zip
    9,6 KB · Просмотры: 23
Дополнение к первому посту, а именно загрузка/изменение/удаление изображения в уже созданной новости

Открываем файл published/SC/html/scripts/modules/news/class.newsmodule.php
Находим
PHP:
case 'SAVE_NEWS':
после него заменяем это
PHP:
					$picture = "";
					if ( $_FILES["picture"]["size"]!=0 && is_image($_FILES["picture"]["name"])){

						$res = Functions::exec('file_move_uploaded', array($_FILES["picture"]["tmp_name"], 	DIR_PRODUCTS_PICTURES."/".$_FILES["picture"]["name"] ));
						if(PEAR::isError($res))Message::raiseMessageRedirectSQ(MSG_ERROR, '', $res->getMessage());

						$picture = $_FILES["picture"]["name"];
						SetRightsToUploadedFile( DIR_PRODUCTS_PICTURES."/".$picture );
					}

					if ( !file_exists(DIR_PRODUCTS_PICTURES."/".$picture) )
					$picture = "";

					$_POST['DATA']['picture'] = $picture?$picture:'';
					if(!$_POST['DATA']['picture'])unset($_POST['DATA']['picture']);
на это
PHP:
					$picture = "";
					if ( $_FILES["DATA"]["size"]["picture"]!=0 && is_image($_FILES["DATA"]["name"]["picture"]))
					{
						$res = Functions::exec('file_move_uploaded', array($_FILES["DATA"]["tmp_name"]["picture"], DIR_PRODUCTS_PICTURES."/".$_FILES["DATA"]["name"]["picture"] ));
						if(PEAR::isError($res))Message::raiseMessageRedirectSQ(MSG_ERROR, '', $res->getMessage());
						$picture = $_FILES["DATA"]["name"]["picture"];
						SetRightsToUploadedFile( DIR_PRODUCTS_PICTURES."/".$picture );
					}
					if ( !file_exists(DIR_PRODUCTS_PICTURES."/".$picture) )
					$picture = "";
					$_POST['DATA']['picture'] = $picture?$picture:'';
					if(!$_POST['DATA']['picture'])unset($_POST['DATA']['picture']);

Далее открываем шаблон published/SC/html/scripts/templates/backend/news_add.html
Находим
HTML:
		<tr>
			<td>{"blog_post_title"|translate} <span class="notice">({"blog_str_not_html"|translate})</span>:</td>
			<td>
				{*<input type=text size="50" name='DATA[title]' value='{$NewsInfo.title}'>*}
				{html_text namespace="DATA" name="title" values=$NewsInfo table=$smarty.const.PRODUCTS_TABLE style="width:100%"}
			</td>
		</tr>
ниже вставляем
HTML:
		<tr>
			<td>Изображение</td>
			<td>
				{if $NewsInfo.picture_exists}
				<img src="{$smarty.const.URL_PRODUCTS_PICTURES}/{$NewsInfo.picture}" hspace="20" vspace="20" style="max-width:120px;max-height:120px;" />
				{/if}
				<div>
					<p>{if $NewsInfo.picture_exists}Изменить{else}Загрузить{/if}</p>
					<input type="file" name="DATA[picture]" />
				</div>
				{if $NewsInfo.picture_exists}
				<p><a href="{"&dlt_picture=1"|set_query}">{"btn_delete"|translate}</a></p>
				{/if}
			</td>
		</tr>

Радуемся какие мы хорошие
 
Проще выкинуть стандартные новости и не пытаться их допилить. Есть модуль статей от JORANGE. Тут он то же где-то есть. Там можно категорию статей сделать с названием новости и выводить их на главной или как угодно. Из плюсов: будут с картинками, категоризированы, есть краткое и полное описание, редактируются META теги, удобный визуальный редактор. Из минусов: нет рассылки подписчикам, как и нет возможности подписаться на новости.
 
Назад
Сверху