Ответить Новая тема Новый опрос 
Всего: 3 1 2 3 >
 Форма контактов
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


20-08-2015 03:54
Всем привет!
Подскажите, пожалуйста, как можно сделать так, чтобы к форме контактов (contact_form) можно было прикреплять не один файл, а несколько.
Заранее благодарю!
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


20-08-2015 13:13
Откройте файл /themes/тема/contact-form.tpl
Код:
<p class="form-group">
    <label for="fileUpload">{l s='Attach File'}</label>
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
    <input type="file" name="fileUpload" id="fileUpload" class="form-control" />
</p>
замените на:
Код:
<p class="form-group">
    <label for="fileUpload">{l s='Attach File'}</label>
    <input type="file" name="files[]" id="fileUpload" class="form-control" />
</p>
<p class="form-group">
    <label for="fileUpload">{l s='Attach File'}</label>
    <input type="file" name="files[]" id="fileUpload" class="form-control" />
</p>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />



Откройте файл /controllers/front/ContactController.php
после:
Код:
$fileAttachment = Tools::fileAttachment('fileUpload');
добавьте:
Код:
if (isset($_FILES['files']['name']) && sizeof($_FILES['files']['name']))
{
    foreach ($_FILES['files']['error'] as $key => $error)
    {
        if (!empty($_FILES['files']['name'][$key]) && $_FILES['files']['error'][$key] != 0)
            $this->errors[] = Tools::displayError('An error occurred during the file-upload process.');
        else if (!empty($_FILES['files']['name'][$key]) && !in_array(Tools::strtolower(substr($_FILES['files']['name'][$key], -4)), $extension) && !in_array( Tools::strtolower(substr($_FILES['files']['name'][$key], -5)), $extension))
            $this->errors[] = Tools::displayError('Bad file extension');
    }
}


после:
Код:
if (!$cm->add())
    $this->errors[] = Tools::displayError('An error occurred while sending the message.');
добавьте:
Код:
if(isset($cm->id))
{
    if (isset($_FILES['files']['name']) && sizeof($_FILES['files']['name']))
    {
        foreach ($_FILES['files']['tmp_name'] as $key => $tmp)
            move_uploaded_file($tmp, _PS_UPLOAD_DIR_ . $cm->id . '__' . uniqid() . $_FILES['files']['name'][$key]);
    }
}


Откройте файл /controllers/admin/AdminCustomerThreadsController.php и перед:
Код:
$this->tpl_view_vars = array(
добавьте:
Код:
$files = array();
foreach ($messages as &$mess)
{
    foreach(glob(_PS_UPLOAD_DIR_.$mess['id_customer_message'].'__*') as $file)
        $mess['files'][] = _THEME_PROD_PIC_DIR_.basename($file);
}



Откройте файл /адм.дир/themes/default/template/controllers/customer_threads/helpers/view/message.tpl и после:
Код:
{if isset($message.file_name)} <span class="message-attachment">&nbsp;<i class="icon-link"></i> <a href="{$message.file_name|escape:'html':'UTF-8'}" target="_blank">{l s="Attachment"}</a></span>{/if}
добавьте:
Код:
{if isset($message.files)}
    {foreach $message.files as $file}
        <span class="message-attachment">&nbsp;<i class="icon-link"></i> <a href="{$file|escape:'html':'UTF-8'}" target="_blank">{l s="Attachment"}</a></span>
    {/foreach}
{/if}
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


21-08-2015 02:48
Спасибо большое, все работает!
Единственное, можно сделать так, чтобы и на почту приходило письмо с этими файлами, а то там на месте "Прикрепленные файлы" прочерк стоит?


Сообщение отредактировано baton94 21-08-2015 03:53 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


21-08-2015 03:17
И еще момент. Я добавил свое поле $contact_name. Прописал его в шаблоне, в ContactController и в письме. Т.е. на почту содержимое поля приходит, все хорошо, а как бы мне это значение поля в админке сделать, т.е. чтобы в заявке в самой админке показывалось. Покопался в файле message.tpl, но так и не смог понять. Если Вам не трудно, расскажите как это можно сделать.
Огромное Вам спасибо!
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


21-08-2015 12:45
Цитата:( baton94 @ 21-08-2015 03:48 Смотреть сообщение )
можно сделать так, чтобы и на почту приходило письмо с этими файлами

Код:
if(isset($cm->id))
{
    if (isset($_FILES['files']['name']) && sizeof($_FILES['files']['name']))
    {
        foreach ($_FILES['files']['tmp_name'] as $key => $tmp)
            move_uploaded_file($tmp, _PS_UPLOAD_DIR_ . $cm->id . '__' . uniqid() . $_FILES['files']['name'][$key]);
    }
}
заменить на:
Код:
if(isset($cm->id))
{
    if (isset($_FILES['files']['name']) && sizeof($_FILES['files']['name']))
    {
        $fileAttachment = array();
        foreach ($_FILES['files']['tmp_name'] as $key => $tmp)
        {
            $fileAttachment[$key]['content'] = file_get_contents($_FILES['files']['tmp_name'][$key]);
            $fileAttachment[$key]['name'] = $_FILES['files']['name'][$key];
            $fileAttachment[$key]['mime'] = $_FILES['files']['type'][$key];

            move_uploaded_file($tmp, _PS_UPLOAD_DIR_ . $cm->id . '__' . uniqid() . $_FILES['files']['name'][$key]);
        }
    }
}


Цитата:( baton94 @ 21-08-2015 04:17 Смотреть сообщение )
Я добавил свое поле $contact_name. Прописал его в шаблоне, в ContactController и в письме. Т.е. на почту содержимое поля приходит, все хорошо, а как бы мне это значение поля в админке сделать

Добавить доп. поле в таблице ПРЕФИКС_contact
Изменить файл /classes/Contact.php, добавив необходимые поля.
Изменить файл /controllers/admin/AdminCustomerThreadsController.php
Изменить файл /адм.дир/themes/default/template/controllers/customer_threads/helpers/view/message.tpl
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
baton94
Новичок
Сообщений: 74
Регистрация: 06-04-2014


21-08-2015 23:28
Спасибо большое, теперь файлы приходят в письмах. Правда перестали появляться в админке, ну да ладно, это не важно. Еще раз огромное спасибо!
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ggyyvv


Cпециалист
Сообщений: 233
Регистрация: 23-11-2012


03-09-2015 17:05
Алекс, подскажите, как можно подключить корректно загрузку файла клиентом в форме заказа? форму сделал, с контроллерами не могу разобраться...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


03-09-2015 17:55
Цитата:( ggyyvv @ 03-09-2015 18:05 Смотреть сообщение )
как можно подключить ... загрузку файла клиентом в форме заказа?


Откройте файл /controllers/front/OrderController.php и в метод postProcess добавьте что-то подобное:
Код:
if ($this->step == 2 && $fileAttachment = Tools::fileAttachment('fileUpload'))
    move_uploaded_file($fileAttachment['tmp_name'], _PS_UPLOAD_DIR_ . $this->context->cart->id . '__' . uniqid() . $fileAttachment['name']);


В файле /themes/тема/order-address.tpl добавьте в форму подобный код:
Код:
<p class="form-group">
    <label for="fileUpload">{l s='Attach File'}</label>
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
    <input type="file" name="fileUpload" id="fileUpload" class="form-control" />
</p>
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ggyyvv


Cпециалист
Сообщений: 233
Регистрация: 23-11-2012


03-09-2015 18:41
а для оформления заказа в один шаг?
форму вставлять в order-opc-new-account.tpl
а контроллер я так понимаю нужно использовать OrderOpcController.php
но я там не нашел такого метода...

p.s. версия ps 1.6.0.14
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


03-09-2015 18:44
Для заказа в один шаг необходимо использовать библиотеку ajaxfileupload и переписывать код под неё.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 3 1 2 3 >