ws17
Новичок
Здравствуйте уважаемые пользователи форума.
Делаю небольшую доработку сайта, в кохане новичек.
У товара есть загрузка фото, загрузка фото и добавление товара происходит админом, только в админке.
Хочу добавить дополнительную загрузку фото к товару, где будет ткань в отдельном блоке на фронтенте.
Что я сделал и что уже работает.
/application/classes/controller/admin
products.php
Методом дубликата я сделал дополнительный код, добавил для теста в акшион edit, акшион при редактировании твара.
Ниже в коде, два когда работы над фотками, смотрим первый, тот что я продублировал и сделал загрузку ткани для товара.
Далее, ниже я подключил свой загрузчик фото, резак, поставил свой путь для фоток для ткани
Далее, добавил в бд таблицу: - дублировал таблицу images, та что работает и была.
назвал таблицу
imgcloth
в нее добавил три параметра: id, product_id, image
Далее я добавил модель в файле /application/classes/model
назвал я ее
imgcloth.php
в этом файле
а в стандартном файле image
я пробовал добавить со стандартного файла и изменить, но у меня не вышло, не записывало в бд то что я добавил картинку и вылезали ошибки.
Щас фаил сохраняться в ту папку что я указал загрузчику
/media/uploads/cloth
В бд сохраняться, когда я загружаю фото.
ВСЕ ЛИ Я ПРАВИЛЬНО СДЕЛАЛ? РАЗ ВСЕ РАБОТАЕТ.
Проблема с выводом, не могу доделать.
Что я сделал на фронте для вывода фоток.
/application/views/index/main
два кода, один рабочий, который выводит фото, а другой, тот что первый это вывод ткани фото. тот что я сделал и пытаюсь вывести фото.
не выводит фото ткани, что не так сделал?
полез я сюда /application/classes/controller/index
открыл фаил который отвечает за вывод полной информации о товаре
product.php
в него я добавил
$imgcloth = ORM::factory('image')->where('id','=',$product->image_id)->find();
и ниже
->bind('imgcloth',$image)
так же я открыл /application/classes/controller/index
и в добавил public function action_product()
$imgcloth = ORM::factory('imgcloth')->where('id','=',$product->image_id)->find();
$imgcloth = ORM::factory('image')->where('product_id','=',$product->id)->find_all();
и
->bind('image',$imgcloth)
я так понимаю что, что то с выводом не так сделал, не разобрался, пробовал по разному вывести не получилось. подскажите где не так.
Делаю небольшую доработку сайта, в кохане новичек.
У товара есть загрузка фото, загрузка фото и добавление товара происходит админом, только в админке.
Хочу добавить дополнительную загрузку фото к товару, где будет ткань в отдельном блоке на фронтенте.
Что я сделал и что уже работает.
/application/classes/controller/admin
products.php
Методом дубликата я сделал дополнительный код, добавил для теста в акшион edit, акшион при редактировании твара.
Ниже в коде, два когда работы над фотками, смотрим первый, тот что я продублировал и сделал загрузку ткани для товара.
Код:
// Работа с фото для товара, ткань
if (!empty($_FILES['imgcloth']['name'][0]))
{
foreach ($_FILES['imgcloth']['tmp_name'] as $i => $image)
{
$filename = $this->_upl_img($image);
if($filename)
{
// Запись в БД
$im_db = ORM::factory('imgcloth');
$im_db->product_id = $products->pk();
$im_db->image = $filename;
$im_db->save();
}
}
$this->request->redirect('admin/products/edit/'.$id);
}
// Работа с фото для товара
if (!empty($_FILES['images']['name'][0]))
{
foreach ($_FILES['images']['tmp_name'] as $image)
{
$filename = $this->_upload_img($image);
// Запись в БД
$im_db = ORM::factory('image');
$im_db->product_id = $products->pk();
$im_db->image = $filename;
$im_db->save();
}
}
$this->request->redirect('admin/products/edit/'.$id);
}
Код:
// Загрузка фото для ткани
public function _upl_img($file, $ext = NULL, $directory = NULL){
if($directory == NULL)
{
$directory = 'media/uploads/cloth/';
$smalldirectory = 'media/uploads/cloth/small/';
}
if($ext== NULL)
{
$ext= 'jpg';
}
// Генерируем случайное название
$symbols = '0123456789abcdefghijklmnopqrstuvwxyz';
$filename = '';
for($i = 0; $i < 10; $i++)
{
$filename .= rand(1, strlen($symbols));
}
//проверяет что бы одна из сторон не была меньше
$im = Image::factory($file);
if($im->width < 350 OR $im->height < 350)
{
return false;
}
else
{
//изменяет размеры большой фотки
$im->resize(1000, 800);
$im->save("$directory/$filename.$ext");
//делает маленькую фотку
$im->resize(350, 197, Image::INVERSE);
//режет маленькую фотку до
$im->crop(350, 197);
$im->save("$smalldirectory/small_$filename.$ext");
return "$filename.$ext";
}
}
назвал таблицу
imgcloth
в нее добавил три параметра: id, product_id, image
Далее я добавил модель в файле /application/classes/model
назвал я ее
imgcloth.php
в этом файле
Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Imgcloth extends ORM {
protected $_table_name = 'imgcloth';
}
Код:
<?php defined('SYSPATH') or die('No direct script access.');
class Model_Image extends ORM {
protected $_belongs_to = array(
'product' => array(
'model' => 'product',
'foreign_key' => 'product_id',
),
);
public function rules()
{
return array(
'image' => array(
array('not_empty'),
),
);
}
}
Щас фаил сохраняться в ту папку что я указал загрузчику
/media/uploads/cloth
В бд сохраняться, когда я загружаю фото.
ВСЕ ЛИ Я ПРАВИЛЬНО СДЕЛАЛ? РАЗ ВСЕ РАБОТАЕТ.
Проблема с выводом, не могу доделать.
Что я сделал на фронте для вывода фоток.
/application/views/index/main
два кода, один рабочий, который выводит фото, а другой, тот что первый это вывод ткани фото. тот что я сделал и пытаюсь вывести фото.
Код:
<?php if($imgcloth->image):?>
<a href="/media/uploads/cloth/<?=$imgcloth->image?>" rel="lightbox[roadtrip]" title="<?php echo $product->prname?>">
<img src="/media/uploads/cloth/<?=$imgcloth->image?>" alt="<?php echo $product->prname?>" title="<?php echo $product->prname?>"/>
</a>
<?php else:?>
<img src="/media/uploads/noimage.jpg" alt="нет фото" title="нет фото"/>
<?php endif; ?>
<br/><br/><br/><br/>
<?php if($image->image):?>
<a href="/media/uploads/<?=$image->image?>" rel="lightbox[roadtrip]" title="<?php echo $product->prname?>">
<img src="/media/uploads/<?=$image->image?>" alt="<?php echo $product->prname?>" title="<?php echo $product->prname?>"/>
</a>
<?php else:?>
<img src="/media/uploads/noimage.jpg" alt="нет фото" title="нет фото"/>
<?php endif; ?>
полез я сюда /application/classes/controller/index
открыл фаил который отвечает за вывод полной информации о товаре
product.php
в него я добавил
$imgcloth = ORM::factory('image')->where('id','=',$product->image_id)->find();
и ниже
->bind('imgcloth',$image)
так же я открыл /application/classes/controller/index
и в добавил public function action_product()
$imgcloth = ORM::factory('imgcloth')->where('id','=',$product->image_id)->find();
$imgcloth = ORM::factory('image')->where('product_id','=',$product->id)->find_all();
и
->bind('image',$imgcloth)
я так понимаю что, что то с выводом не так сделал, не разобрался, пробовал по разному вывести не получилось. подскажите где не так.