当前位置: 首页 > news >正文

October CMS - 快速入门 9 Images And Galleries

这一部分我们将为影片创建图片和图片库
首先我们将分页改为每页10个影片

clipboard.png

clipboard.png

设置图片

下面,我们将设置图片,点击菜单【builder】选择【Movies】选择【Models】选择【Forms】中的fields.yaml
添加一个上传表单,而且我们不需要为此创建数据库字段,October会自动处理

clipboard.png

现在我们点击【视频】菜单,选择一个视频编辑

clipboard.png

会出现如下错误说明没有定义poster

clipboard.png

我们需要在代码编辑器中,修改文件:pluginsraiseinfomoviesmodelsMovie.php

为poster添加一个关系,关联到系统的图片表,把图片附加到视频表上。

    /**
     * 关系,用于将图片附加到Movies表上
     */
    public $attachOne = [
        'poster' => 'System\Models\File'
    ];

再次刷新页面,现在可以进行图片上传了。

clipboard.png

clipboard.png

如何显示上传的图片:
themesraiseinfopagesmovie-single.htm

{{ record.poster }}
{% if record %}
<!--{{ attribute(record, displayColumn) }}-->
<h2>{{ record.name }}</h2>

{{ record.poster }}

<h4>{{ record.year }}</h4>

<h3>简介</h3>

<p>
    {{ record.description|raw }}
</p>

{% else %}
    {{ notFoundMessage }}
{% endif %}

查看视频页面:http://octobermovie.dev.raise...

clipboard.png

会出现上面图片显示的信息,图片并没有显示出来。

如果我们使用{{ record.poster.path }}
则显示图片地址,到这里,你或许就明白了,我们需要构建一个img标签,把这个地址作为img的标签属性即可。

clipboard.png

<img src="{{ record.poster.path }}" alt="">

再次刷新:

clipboard.png

但是,我们发现图片太大了。好的,我们可以继续设置。

<img src="{{ record.poster.thumb(200,auto) }}" alt="">

clipboard.png

再比如:对图像进行200x200的裁剪

<img src="{{ record.poster.thumb(200,200,{'mode':'crop'}) }}" alt="">

clipboard.png

设置画廊

我们将在Models——Movie——Forms——fields.yaml中添加新的字段

clipboard.png

接下来,如果我们保存后,去编辑视频,则还会出现错误

clipboard.png

那么和原来一样,我们修改插件的Models文件
pluginsraiseinfomoviesmodelsMovie.php

 public $attachMany = [
    'movie_gallery' => 'System\Models\File'
];

再次刷新:
clipboard.png

现在可以上传多张图片了

clipboard.png

这些图片可以拖动,调整顺序,或者是删除。

我们要是显示这些图片,则在themesraiseinfopagesmovie-single.htm进行代码修改

<h3>图集</h3>
<ul>
    {% for image in record.movie_gallery %}
        <li>
            <a href="{{ image.path }}">
                <img src="{{ image.thumb(80,auto) }}" alt="">
            </a>
        </li>
    {% endfor %}
</ul>

clipboard.png

当然我们可以使用js插件进行显示和展示。

相关文章:

  • 获取当前页面URL与服务器响应
  • IDEA上传项目到Github
  • ASP.NET Core MVC+EF Core从开发到部署
  • Python 爬虫练习项目——异步加载爬取
  • 【对讲机的那点事】玩对讲机你知道对讲机通讯距离的计算方法吗?
  • python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
  • CF 612C. Replace To Make Regular Bracket Sequence【括号匹配】
  • 编程遇到英语必备
  • vuex的安装和入门demo
  • jQuery缩小放大触发事件
  • js进阶 11-13 jquery如何包裹元素和去除元素外的包裹
  • Linux 守护进程
  • 甲骨文解散Java Mission Control团队事件新进展
  • 内部类访问局部变量为什么要用final修饰
  • Java高级编程——选redis还是memcache,源码怎么说?
  • 【5+】跨webview多页面 触发事件(二)
  • Apache Zeppelin在Apache Trafodion上的可视化
  • create-react-app项目添加less配置
  • JAVA SE 6 GC调优笔记
  • js继承的实现方法
  • LeetCode29.两数相除 JavaScript
  • overflow: hidden IE7无效
  • SpringCloud集成分布式事务LCN (一)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 机器学习 vs. 深度学习
  • 深入浏览器事件循环的本质
  • 想写好前端,先练好内功
  • 小程序 setData 学问多
  • const的用法,特别是用在函数前面与后面的区别
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​一些不规范的GTID使用场景
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (26)4.7 字符函数和字符串函数
  • (BFS)hdoj2377-Bus Pass
  • (C++)八皇后问题
  • (C语言)fread与fwrite详解
  • (MATLAB)第五章-矩阵运算
  • (Note)C++中的继承方式
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (转)编辑寄语:因为爱心,所以美丽
  • .a文件和.so文件
  • .chm格式文件如何阅读
  • .naturalWidth 和naturalHeight属性,
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 中的轻量级线程安全
  • .net分布式压力测试工具(Beetle.DT)
  • .NET企业级应用架构设计系列之应用服务器
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @ResponseBody
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限