Документация

Начало работы

Модели (models)

Шаблоны (views) и маршрутизация (routes)

Формы

SQL запросы

Сессии и безопасность

Плагины

Файлы и изображения

В MV существуют 3 типа данных для хранение файлов:

  1. "file" (одиночный файл),
  2. "image" (одиночное изображение),
  3. "multi_images" (массив изображений с комментариями).

В базе данных хранятся пути к файлам от корня проекта без начального слэша. Файлы типа "file" хранятся в папках "userfiles/models/название_модели-files/". Все изображения моделей находятся в папках вида "userfiles/models/название_модели-images/". При загрузке на сервер каждому файлу присваивается уникальный номер, который становится его названием.

Уменьшенные копии изображений создаются в подпапках, при этом название подпапки задается автоматически, основываясь на размерах и названии текущей модели, например "media/userfiles/models/gallery-images/gallery_70x70/gallery_70x70_f64.jpg".

Вывод файлов для скачивания и изображений

  • displayFileLink($field [, $link_text, $no_file_text]) - возвращает ссылку на файл для скачивания

Дополнительные параметры:
$link_text - название файла для вставки в ссылку (если отсутствует, то будет поставлено название самого файла)
$no_file_text - если файл отсутствует и задан данный параметр то будет выведен этот текст

  • displayImage($field [, $alt_text, $no_image_text]) - возвращает тег "img" с данным изображением

Дополнительные параметры:
$alt_text - альтернативный текст для тега "img"
$no_image_text - если изображение отсутствует и задан данный параметр то будет выведен этот текст

Уменьшение и обрезка изображений

  • cropImage($image, $width, $height [, $extra_params]) - уменьшение изображения до заданных размеров с "обрезкой".
  • resizeImage($image, $width, $height [, $extra_params]) - пропорциональное уменьшения изображения без "обрезки".

Данные методы возвращают тег "img" с данным изображением, пропорционально уменьшенным, а в случае метода "cropImage" дополнительно "обрезанным" до заданных размеров.

Методы "cropImage()" и "resizeImage()" могут вызываться из объекта модели и из объекта класса "Record", при этом они создают папку для уменьшенных копий, основываясь на принадлежности файла к определенной модели.

Дополнительные параметры могут быть переданы в виде ассоциированного массива $extra_params. Возможные варианты параметров (ключи): "alt-text", "no-image-text", "title". Ни один из параметров не является обязательным. При передаче параметра он будет добавлен к тэгу "img".

Внимание! При вызове методов из объекта модели в качестве параметра "$image" необходимо передавать путь до файла, в том виде как он лежит в базе данных (без корневого пути), а если методы вызываются из объекта класса "Record", то необходимо передать этот параметр как название поля модели, тогда путь до файла будет браться из поля записи, загруженной в объект "Record". Смотрите примеры ниже.

Работа с массивом изображений

  • extractImages($field [, $no-comments]) - преобразование в массив изображений. Возвращает ассоциированный массив, где ключи - пути к изображениям, а значения - комментарии. Если передать значение второго необязательного параметра "no-comments", то будет возвращен обычный нумерованный массив путей к изображениям.
  • getFirstImage($field) - извлечение первого изображения из массива. Возвращает строковое значение пути к изображению без комментария.

Примеры

Создадим модель и извлечем в шаблонах нужные данные

<? 
class Products extends Model 
{
    protected $name = "Товары";

    protected $model_elements = array(
        array("Название", "char", "name", array("required" => true)),
        array("Главное изображение", "image", "main_image"),
        array("Дополнительные изображения", "multi_images", "extra_images"),
        array("Инструкция", "file", "manual"),
        array("Описание", "text", "text_description")
    );
}
?>
CREATE TABLE "news" (
  "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  "name" VARCHAR, 
  "main_image" VARCHAR, 
  "extra_images" TEXT,
  "manual" VARCHAR,
  "text_description" TEXT)

Выводим список всех товаров с изображениями для общего шаблона (файл "products.model.php")

<? 
public function display()
{
    $rows = $this -> select();
    $html = "";

    foreach($rows as $row)
    {
        $url = $this -> root_path."product/".$row["id"]."/";

        $html .= '<div class="name">';
        $html .= '<a href="'.$url.'">'.$row["name"].'</a>';
        $html .= "</div>"
        $html .= '<div class="image">';
        $html .= $this -> cropImage($row["main_image"], 150, 150).'</div>';
        $html .= '<div class="desc">';
        $html .= Service :: cutText($row["text_description"], 200, "...").'</div>';
    }

    return $html;
}
?>

Выводим список инструкций товаров, у которых они есть (файл "products.model.php")

<?
public function displayManuals()
{
    $rows = $this -> select("manual!=" => "");
    $html = "";

    foreach($rows as $row)
    {
        $html .= '<div class="dowload-file">';
        $html .= '<a href="'.Service :: addFileRoot($row["manual"]).'">'.$row["name"].'</a>';
        $html .= '</div>';
    }

    return $html;
}
?>

На странице товара выводим все доступные данные (файл "view-product.php")

<? 
$product = $mv -> products -> defineProductPage($mv -> router);
//Выбор записи на основе URL
$mv -> display404($product);

include $mv -> views_path."main-header.php";
?>
<div id="content">
     <h2><? echo $product -> name; ?></h2>
     <div id="main-picture">
        <a class="lightbox" href="<? echo $mv -> root_path.$product -> main_image; ?>">
            <? echo $mv -> products -> resizeImage($product -> main_image, 300, 250); ?>
        </a>
     </div>
     <div id="extra-pictures">
        <?
            //Вывод массива изображений для lightbox
           foreach($product -> extractImages("extra_images", "no-comments") as $image)
           {
               echo '<a class="lightbox" href="'.$mv -> root_path.$image.'">';
               echo $mv -> products -> cropImage($image, 100, 100).'</a>';
           } 
        ?>
     </div>
     <p><? echo $product -> text_description; ?></p>
     <p><? echo $product -> displayFileLink("manual", "Скачать инструкцию");  ?></p>
</div>
<?
include $mv -> views_path."main-footer.php";
?>

Предыдущий раздел

Объект класса Record

Следующий раздел

Дата и время