Задача: Нужно добавить возможность загрузки файла при оформление заказа в виртуемарт. Например у вас есть интернет магазин футболок на джумале и вы хотите, чтобы при заказе пользователь мог указать картинку, которую он хочет видеть на своей футболке.
Решение: Мы сделаем так, что пользователь сможет добавлять не один файл. У меня установлен компонент "onepage_generic" (заказ в один шаг), поэтому я буду работать в основном с ним. Если у вас нету этого компонента, то не переживайте, вам просто надо будет найти файлы в которых выводятся поля заполняемые пользователем и файлы отвечающие за отправку письма о заказе.
Открываем файл "\plugins\system\onepage_generic\cart\tmpl\default_shopper.php" Перед этой строчкой:
Добавляем код:
<label><strong>Выберите рисунок:</strong></label><br> <input type="file" name="uploadfile[]"><br> <span id="df-sk"></span> <input type="hidden" id="kolf" value="1" name="kolf"/> <div class="dobavsk"> Добавить файл </div>
Для того, чтобы по нажатию на кнопку "Добавить файл", появлялся новый инпут для добавления файла, найдите файл "\plugins\system\onepage_generic\onepage.js" и добавьте вот этот код:
jQuery(".dobavsk").click(function(){ var kol = jQuery("#kolf").val(); kol = parseInt(kol)+1; jQuery("#kolf").attr("value", kol); jQuery('<input type="file" name="uploadfile[]"></br>').insertBefore("#df-sk"); });
При клике переменная kol получает значение скрытого инпута, приплюсовывает к этому значению единицу и записывает новый результат в тот же скрытый инпут (зачем вы узнаете ниже), затем идет добавление нового инпута типа file перед элементом с id "df-sk". Теперь надо вставить php код для загрузки файлов на сервер, поэтому открываем в корне index.php и в конце файла пишем:
<?php if($_FILES){ for($xx=0; $xx<$_POST["kolf"]; $xx++){ copy($_FILES['uploadfile']['tmp_name'][$xx],"uploads/".basename($_FILES['uploadfile']['name'][$xx])); } } ?>
Наверное index.php не лучший файл для этого, вы возможно найдете другое место для этой операции. $_POST["kolf"] - Это как раз значение нашего скрытого инпута оно содержит количество инпутов типа file, т.е. в цикле выполняется загрузка всех файлов в папку, которая лежит в корне сайта: uploads. Файлы на сервер загружаются, теперь надо сделать так, чтобы эти картинки приходили в письме с заказом. Для этого откройте файл "/components/com_virtuemart/views/invoice/tmpl/invoice_items.php" и например в конце перед закрывающем тегом </table>, добавьте:
<strong>Картинки:</strong></br> <?php for($xx=0; $xx<$_POST["kolf"]; $xx++){ ?> <img src="http://ваш_сайт/uploads/<?=$_FILES['uploadfile']['name'][$xx];?>"/><br> <?php } ?>
Этот код конечно далеко не универсальный и наверное он подойдет не всем, но я думаю, что если перед вами стоит похожая задача, то эта статья будет вам полезна.