Ночь не удалась...
Итак.
Задача: реализовать возможность загрузки файлов пользователем на этапе заказа позиции (Добавить в корзину)
Не мудрствуя лукаво (и, к слову, на момент открытия этой темы, не зная php), я подумал, что наиболее разумным будет использовать уже имеющиеся в магазине возможности.
1. Есть библиотека загрузки файлов (/components/com_jshopping/lib/uploadfile.class.php)
2. Есть так называемые свободные атрибуты, которые прекрасно скрываются от глаз пользователей.
Поэтому, этим и будем пользоваться, дабы не изобретать велосипед.
Файл 1: Шаблон страницы позиции находится тут:
/components/com_jshopping/templates/default/product/product_default.phpФайл 2: Контроллер добавления позиции в корзину находится тут:
/components/com_jshopping/controllers/cart.php1. Создаем свободный атрибут "Файл" (file)
(в нём, в скрытом виде, мы будем передавать имя загруженного файла куда угодно)2.1. В файл1 прописываем
<input type="file" name="file" />
в любое удобное Вам место.
(это поле загрузки файла у пользователя на фронтэнде)2.2. Туда же, вместо
<td width="110"><?php print $freeattribut->name;?> <?php if ($freeattribut->required){?><span>*</span><?php }?></td>
<td><input type="text" class="inputbox" size="40" name="freeattribut[<?php print $freeattribut->id?>]" value="" /></td>
пишем:
<?php if ($freeattribut->name=="Файл") {?>
<td><input type="hidden" class="inputbox" size="40" name="freeattribut[<?php print $freeattribut->id?>]" value="af33cc0cf625db880fa28" /></td>
<?php }
else {?>
<td width="110"><?php print $freeattribut->name;?> <?php if ($freeattribut->required){?><span>*</span><?php }?></td>
<td><input type="text" class="inputbox" size="40" name="freeattribut[<?php print $freeattribut->id?>]" value="" /></td>
<?php } ?>
(Проверяем, если нужный нам свободный атрибут, созданный на этапе 1, присутствует, скрываем его и запихиваем в него какое-либо значение, желательно, такое, что просто так и не воспроизвести. Запоминаем его, оно нам понадобиться.)3. В файл2 прописываем:
3.1. В функцию add(), после хэдера, но до строки
$product_id = JRequest::getInt('product_id');
(!), мы прописываем нашу заливку:
require_once ($jshopConfig->path.'lib/uploadfile.class.php');
$upload = new UploadFile($_FILES['file']);
$upload->setDir("orderfiles");
$upload->setNameWithoutExt($order_id);
if ($upload->upload()){
$filelink = $upload->getName();
}
(Функция загрузки файла, последующего его переименования (расширение остается) и запихивания имени в переменную)3.2. Сразу после
$freeattribut = JRequest::getVar("freeattribut"); if (!is_array($freeattribut))
, добавляем:
if ($filelink != "") {
$freeattribut = str_replace("af33cc0cf625db880fa28", $filelink, $freeattribut);
}
else {
$freeattribut = str_replace("af33cc0cf625db880fa28", "нет", $freeattribut);
}
(здесь мы в общем массиве данных атрибутов меняем то самое неполиткорректное выражение из пункта 2 на имя файла, если, конечно, он вообще был загружен)В общем-то всё.
Далее уже идут навороты: проверка размера и расширений файлов, монтаж ссылок из имени файла и т.п.. Самое основное, вроде, не забыл)))
Вопросы будут - пишите.