Модуль «Files»

Применение модуля и вопросы по использованию
Быстрый переход:
Роман

Роман

Member
#1   16 марта 2015 21:27

Здравствуйте,

у меня появился вопрос по функции cot_files_get при использовании в кратких новостях и других аналогичных list местах.

Если на странице много новостей, например 50, то каким образом повлияет вызов миниатюры 

<!-- IF {LIST_ROW_ID|cot_files_count('page',$this,'logo','images')} > 0 -->
<div class="pull-left marginright10 marginbottom10">
    <a href="{LIST_ROW_URL}" title="{LIST_ROW_SHORTTITLE}" rel="bookmark" class="thumbnail"><img
                alt="{LIST_ROW_SHORTTITLE}" src="{LIST_ROW_ID|cot_files_get('page',$this,'logo')|cot_files_thumb($this,195,130,'crop')}" /></a>
</div>
<!-- ENDIF -->

Судя по тому что написано в описании к  pagelist+ у вашего коллеги (и тезки), функция att_get имеет свой запрос к базе данных, выходит что cot_files_get  тоже ?

Если есть необходимость вызывать к каждой новости миниатюру, по 1 на статью, например на главной, то какой вариант вызова будет самым малонагруженным ?

Раньше приходилось делать экстраполе и при добавлении/редактировании вставлять в него путь к миниатюре. 

Насколько отличается нагрузка при вызове  cot_files_get по сравнению с экстраполем?

И какой вариант рекомендуете использовать для вызова миниатюр модуля на главной и в категориях ?

Алексей

Алексей

Administrator
#2   17 марта 2015 00:40

Функция cot_files_get отправляет запрос к БД. И cot_files_count тоже. Соотвественно на 50 элементов на странице, виджет подключенный в шаблоне отправит дополнительно 100 запросов к базе. Плагин Attach2 работал по такому же принципу. Это не очень существенно, если страница кешируется.

Если Вы пишите расширение которое будет работать с модулем Files, то в контроллере Вы можете использовать API модуля более гибко. Можно попробовать построить и выполнить запрос, который выберет все файлы одним запросом.

Код выборки будет выглядить так:

$files = files_model_File::find(array(array('SQL', 'Ваш запрос')));

Затем полученный результат можно разобрать и передать в шаблонизатор.

Подробнее о построении запросов к моделям можно почитать тут (абзац: Условия для выборки)

Отредактировано: Alex (17.03.2015 02:42, 2 года назад)

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#3   25 марта 2015 15:38

С контроллером нужно еще практиковаться, никогда не сталкивался на практике.

Но появился другой вопрос:

Есть ли возможность загрузки файлов из интернета при помощи cot_files_get или иначе?

Алексей

Алексей

Administrator
#4   26 марта 2015 11:16

Нет, cot_files_get служит исключительно для получения файлов, загруженных на сайт при момощи модуля файлов. Для скачивания удаленных файлов с других серверов существует масса способов. Самый простой: использование встроенной в php функции file_get_contents().

P.S. Контроллер - это та часть приложения, которая интерпретирует запрос от пользователя. Получает нужные модели и/или данные и отдает это все представлению (или шаблону).

Отредактировано: Alex (26.03.2015 15:47, 2 года назад)

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#5   26 марта 2015 12:46
#10308 Alex:

Нет, cot_files_get служит исключительно для получения файлов, загруженных на сайт при момощи модуля файлов. Для скачивания удаленных файлов с других серверов существует масса способов. Самый простой: использование встроеннов в php функции file_get_contents().

 

Насчет file_get_contents() я в курсе, использую часто. Просто думал может есть возможность работать посредством модуля со сторонними изображениями. 

А в остальном с модулем разобрался, уже в нескольких модулях и плагинах подключил, работает и при добавлении и при удалении корректно.

Добавлено 2 дня спустя:

Добрый день,

в файле templates  есть тег  {%=file.thumbnailUrl%}

он выдает адрес миниатюры с приставкой lastmodified , а мне нужно получить адрес в том же месте в чистом виде без приставки

Есть ли возможность это сделать ?

Отредактировано: PRoHtml (28.03.2015 17:24, 2 года назад)
Алексей

Алексей

Administrator
#6   28 марта 2015 19:13

Используйте тег {%=file.thumbnail%}

Но это специально сделано на случай, если файл был заменен на другой с тем же именем, чтобы браузер не использовал старую закешированную миниатюру.

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#7   28 марта 2015 19:18

И еще вопрос попутно, каким образом модуль files может взаимодействовать с CKEditor при вставке картинок ?

Насчет PFS я в курсе, но интересует именно вставка тех что загружаются через filebox.

У меня есть одна идея как это сделать, но я мало знаком с CKEditor, вот и до него добрался.

Для этого нужно делать вставку из файла, например files.gallery.tpl , я так делал с attach2 , но использовал другой редактор, там тоже нужно для доступа instance вида  *****("instance");editor.insert("*************");

 

Вообще было бы неплох такой файл по умолчанию сделать в модуле, для вставки изображений по клику. Очень удобно, в один клик ставится миниатюра или оригинал. Наработка уже протестирована на attach2 , с другим визуальным редактором.

Отредактировано: PRoHtml (28.03.2015 23:08, 2 года назад)
Алексей

Алексей

Administrator
#8   28 марта 2015 19:47

Что здесь не так - это нужно разбираться. Код похож на верный. Суть тоже верная  - ссылка или кнопка, которая по клику вызывает вставку миниатюры. В коробке пока не предвидится т.к. это почти не востребовано. (Кроме Вас никто не спросил ))) ). Обычно в редактор вставляют файлы из PFS.

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#9   28 марта 2015 19:50

Просто никто не знает как иначе вставлять, но это дело хозяйское, ладно, пойду смотреть код дальше

Добавлено 3 часа спустя:

=========================

Уже сам разобрался в документации

Добавлено 6 месяцев спустя:

Добрый вечер,

для реализации некоторой задачи возникла необходимость в files.templates.tpl получить чистое расширение файла, но так как там синтаксис x-tmpl , внутри него есть только номер + расширение, например 83.jpg но нужно было именно то что после точки.

В php функцию вставить {%=file.name%}  не вышло сходу, а заглянув в файл files.upload.php , понял что проще добавить строчку кода и потом вызывать в шаблоне.

После:

 'lastmod'     => strtotime($row->file_updated),

( ~ 102 строка )  добавил:

 'ext'         => $row->file_ext,

И теперь в шаблоне расширение получается с помощью   {%=file.ext%}

Есть ли другие варианты получить расширение внутри скрипта?   мне нужно именно в этом месте:

<script id="template-download" type="text/x-tmpl">

    {% for (var i=0, file; file=o.files[i]; i++) { %}
    <tr class="template-download fade blshadow" id="file_{%=file.id%}" data-id="{%=file.id%}" data-url="{%=file.url%}"
            data-thumbnail="{%=file.thumbnail%}" data-name="{%=file.name%}">
        <td>
            <div class="att-gallery">
            {% if (file.isImage == 1) { %}
                {% if (file.thumbnailUrl) { %}
****** здесь нужно расширение

 

Если есть, поделитесь рецептом, если нет, было бы неплохо добавить тег

 

Добавлено 2 часа спустя:

******************

И еще вопрос по водяному знаку.

Каким образом можно включить наложение на оригинал ?

Не мешало бы внедрить эту возможность по умолчанию, и добавить выбор:

Наложить водяной знак на оригинал?

Отредактировано: Roffun (04.10.2015 02:38, 1 год назад)
Алексей

Алексей

Administrator
#10   05 октября 2015 11:20

Наложения водяного знака на оригинал нет т.к. именно с него потом генерируются миниатюры и на них это скажется. Если нужно отдавать большую картинку с водяным знаком - просто генерируйте большую миниатюру

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#11   05 октября 2015 15:40

Добрый день,

есть ли в модуле files функция для вызова произвольной картинки из папки шаблона в page.list.tpl ?

Интересует не просто вызов, а именно создание миниатюры в зависимости от настроек.

Например в случае отсутствия картинки к статье нужно вывести картинку noimage.jpg с размерами как у остальных картинок, настраиваемом в функции. Например картинка лежит 400*400 , и нужно её вызывать с размерами как у остальных.

 

            <!-- IF {LIST_ROW_ID|cot_files_count('page',$this,'','images')} > 0 -->
            {LIST_ROW_ID|cot_files_gallery('page',$this,'','files.gallery.lists',1)}
            <!-- ELSE -->
            <img src="themes/{PHP.theme}/img/noimage.jpg" alt="{LIST_ROW_SHORTTITLE}">
            <!-- ENDIF -->

 

Добавлено 2 дня спустя:

И еще вопрос, можно ли сделать так, чтобы в названиях изображений был алиас статьи, без правок кода модуля ? 

Отредактировано: Roffun (20.01.2016 12:39, 1 год назад)
Алексей

Алексей

Administrator
#12   21 января 2016 00:59
#10320 Roffun:

есть ли в модуле files функция для вызова произвольной картинки из папки шаблона в page.list.tpl ?

Интересует не просто вызов, а именно создание миниатюры в зависимости от настроек.

Например в случае отсутствия картинки к статье нужно вывести картинку noimage.jpg с размерами как у остальных картинок, настраиваемом в функции. Например картинка лежит 400*400 , и нужно её вызывать с размерами как у остальных.

Не понял про произвольную картинку из папки шаблона page.list.tpl. Он не "знает" из какого шаблона его вызывает. И тем более не проверят папку с шаблоном на диске на наличие других файлов.

Нужна заглушка. Ее размер лекго подгоняется при помощи css. Или можно создать несколько файлов "заглушек". У вас же не два дестяка разных вариантов размеров картинок будет.

Если уж очень нужно, чтобы сервер сам создавал миниатюры то есть функция cot_files_thumbnail (объявлена в modules/files/inc/files.functions.php). Обратите внимание - она не проверяет существование миниатюры и просто перезапишет ее. Проверку нужно делать в шаблоне самостоятельно. Но я бы на последнем варианте не заморачивался и сделал как написано в абзаце выше.

Добавлено 2 дня спустя:

И еще вопрос, можно ли сделать так, чтобы в названиях изображений был алиас статьи, без правок кода модуля ? 

Как минимум 2 варианта:

1) Присваивать файлам правильное название. У них есть это поле "по умолчанию". Если его мало, можно использовать экстраполя и выводить их.

2) Вписать алияс страницы в свойство title тега IMG в шаблоне. Зачем ради этого править модуль? Если тег IMG находится в другом шаблоне, например в шаблоне галереи, то в шаблоне вывода страницы объявить глобальную переменную, а в шаблоне галереи вывести ее. Правда с коробочным шаблонизатором Cotonti это делается немного "через одно место", но вполне осуществимо.

Отредактировано: Alex (21.01.2016 01:10, 1 год назад)

Быстрота и надежность... Ну и красота тоже, конечно

Роман

Роман

Member
#13   21 января 2016 13:01
#10330 Alex:
 

Не понял про произвольную картинку из папки шаблона page.list.tpl. Он не "знает" из какого шаблона его вызывает. И тем более не проверят папку с шаблоном на диске на наличие других файлов.

Суть вопроса в том, чтобы картинку, например noimage.jpg, которая лежит в папке img шаблона, можно было вызвать в кратких новостях (page.list.tpl), когда картинка отсутствует.

Насчет заготовки  разных размеров, или подгонки через css , я естественно в курсе, но для конкретного случая желательно было именно создать нужную миниатюру в зависимости от настроек. Например новостной сайт, в списках страниц десятки разных видов изображений, плюс несколько слайдеров и листалок.

Интересует именно возможность, есть она или нет ?  если исходить из рассчета что в папке img шаблона лежит большая картинка, например 700x700 , и из неё нужно делать миниатюры для разных шаблонов (размеров) в случае отсутствия картинки.

 

#10330 Alex:

Как минимум 2 варианта:

1) Присваивать файлам правильное название. У них есть это поле "по умолчанию". Если его мало, можно использовать экстраполя и выводить их.

2) Вписать алияс страницы в свойство title тега IMG в шаблоне. Зачем ради этого править модуль? Если тег IMG находится в другом шаблоне, например в шаблоне галереи, то в шаблоне вывода страницы объявить глобальную переменную, а в шаблоне галереи вывести ее. Правда с коробочным шаблонизатором Cotonti это делается немного "через одно место", но вполне осуществимо.

Я имею ввиду не тайтл или альт, а именно название изображения. Например сейчас все изображения имеют такое название:

префикс_ID-размер-метод.расширение например:    file_303-170x170-crop.jpg 

Вот именно об этом названии я задавал вопрос. Добавить туда алиас можно без правки модуля | написания плагина, или здесь нужно только доработки?

 

 

 

Алексей

Алексей

Administrator
#14   21 января 2016 14:42

про заглушки написал постом выше: cot_files_thumbnail (объявлена в modules/files/inc/files.functions.php)

имена файлов - нет - такой возможности нет

Быстрота и надежность... Ну и красота тоже, конечно

Аватар

Yaroslav

Member
#15   31 января 2016 19:45

Добрый,

Что не правильно в коде на странице добавления

{PHP|cot_files_filebox('mymodule', 0, 'mainlogo','image',1)}

Жму загрузить - ошибка - превышен лимит, публикую, редактировать - все ок. 

Добавлено 17 часов спустя:

Если ставить 2 то позовляет загрущить 1 файл :) 

Отредактировано: CrazyFreeMan (01.02.2016 13:37, 1 год назад)