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

Тема в разделе "WebAsyst", создана пользователем kadurinho, 19 дек 2012.

Модераторы: mdss
  1. kadurinho

    kadurinho Shop Script

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

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

    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">
    

    Вот в принципе и все. Единственное что не работает толком, так это загрузка нового или удаление старого изображения при редактировании новости. Кто поможет буду благодарен
     
    White_S, pratak, Pashok1 и ещё 1-му нравится это.
  2. Olekiy2012

    Olekiy2012 Постоялец

    Регистр.:
    26 дек 2012
    Сообщения:
    67
    Симпатии:
    8
    Спасибо, хороший пост. Можно Вас попросить показать сайт, где это работает? Вроде все и стало, но вылазит какой-то глюк, пока не разобрался. В принципе, если копировать верстку в WYSIWNG-редактор, то с картинками проблем нет, и не надо дополнительного функционала. Основной момент, что редко этот способ подходит для заказчиков, так как менеджеры магазина не всегда обладают базовыми знаниями HTML.
     
  3. kadurinho

    kadurinho Shop Script

    Moderator
    Регистр.:
    21 июн 2011
    Сообщения:
    618
    Симпатии:
    248
    Для спасибо есть кнопка "Мне нравится"

    Какой глюк вылазит? Причем тут вообще верстка вставленная в редактор? Данная доработка служит для того, чтобы админ мог добавлять без проблем изображение к новости. Обычное выравнивание не прокатывало. Шаблон вывода новости верстается по дизайну.
     
  4. Pashok1

    Pashok1 Постоялец

    Регистр.:
    24 янв 2008
    Сообщения:
    62
    Симпатии:
    2
    У меня почему-то не работает...
    При сохранении новости - не загружает изображение и не добавляет его в таблицу новостей :( (саму новость сохраняет)
    Уже все перепроверил, пересмотрел...
    Может кто подскажет, что конкретно и где надо еще посмотреть
     
  5. Pashok1

    Pashok1 Постоялец

    Регистр.:
    24 янв 2008
    Сообщения:
    62
    Симпатии:
    2
    И еще один вопрос:
    Хочу сделать отправку новости подписчикам в красивом дизайне (с 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 часа ковыряний и экспериментов результата не дали :(

    Буду очень благодарен за ответ.
     
  6. Pashok1

    Pashok1 Постоялец

    Регистр.:
    24 янв 2008
    Сообщения:
    62
    Симпатии:
    2
    Так как все молчат и ни кто не хочет помочь - сделал тупо:
    В таблицу базы "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: "",

    Конешно не самое лучшее решение, но работает.....
     
  7. Pashok1

    Pashok1 Постоялец

    Регистр.:
    24 янв 2008
    Сообщения:
    62
    Симпатии:
    2
    Тоже сам разобрался
    Необходимо было убрать $picture = ""; - встречается дважды в части кода добавления изображения.
    Теперь имя изображения записывается в таблицу.
    Сейчас проблема в том, что само изображение не загружается в указанную папку.
    На сколько я полнял - почему-то не срабатывает функция file_move_uploaded
    подскажите пожалуйста, где копать
     
  8. kadurinho

    kadurinho Shop Script

    Moderator
    Регистр.:
    21 июн 2011
    Сообщения:
    618
    Симпатии:
    248
    Обновил первый пост. Добавил 4 пункт. Также ниже добавил архив со всеми уже измененными файлами. В архиве сохранены пути, так что просто копируем содержимое архива в корень сайта

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

    Вложения:

  9. mdss

    mdss ♖♘♗♕♔♗♘♖

    Moderator
    Регистр.:
    20 фев 2007
    Сообщения:
    1.134
    Симпатии:
    668
    Дополнение к первому посту, а именно загрузка/изменение/удаление изображения в уже созданной новости

    Открываем файл published/SC/html/scripts/modules/news/class.newsmodule.php
    Находим
    PHP:
    case 'SAVE_NEWS':
    после него заменяем это
    PHP:
                        $picture "";
                        if ( 
    $_FILES["picture"]["size"]!=&& 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"];
                            
    SetRightsToUploadedFileDIR_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"]!=&& 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"];
                            
    SetRightsToUploadedFileDIR_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>
    Радуемся какие мы хорошие
     
    White_S и kadurinho нравится это.
  10. 99cent

    99cent

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