https://discuz.dismall.com/thread-1905996-1-1.html
dplayer 1.25.0 for discuz 插件 视频播放器 整合discuz 3.1使用教程 真正可用的懒人方法
Discuz! 使用方法注:本人采用Discuz!自带代码编辑器实现
1. 引入DPlayer所需的JS和CSS:
在/template/模板目录/common/header_common.php文件内:
<script src="https://cdn.bootcss.com/webtorrent/0.107.16/webtorrent.min.js"></script> <script src="https://cdn.bootcss.com/flv.js/1.5.0/flv.min.js"></script> <script src="https://cdn.bootcss.com/dashjs/3.0.0/dash.all.min.js"></script> <script src="https://cdn.bootcss.com/hls.js/8.0.0-beta.3/hls.min.js"></script> <link href="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.js"></script>
注:webtorrent,flv,dash,hls可按需引入,DPlayer.min.css一定要在DPlayer.min.js前加载!
2. 在Discuz!后台-界面-编辑器设置-编辑 Discuz! 代码新建一个Discuz! 代码,标签为video,显示顺序自己调整,我的为10,图标文件为video.gif,链接:video.gif
直接下载我的图标文件然后放到/static/image/common/目录下就可以了
3. 进入代码详情,替换内容为:
<div id="dplayer"></div> <script type="text/javascript"> const dp = new DPlayer({ container: document.getElementById('dplayer'), video: { url : '{1}', type : 'auto', }, }); </script>
参数个数为1
例子,解释,嵌套次数,参数提示语,允许使用此代码的用户组请按需设置
接下来请使用吧,在帖子编辑内使用就好了
原文连接:https://www.lovewx.club/dplayer-for-discuz/
DPlayer For Discuz!
Discuz! 使用方法注:本人采用Discuz!自带代码编辑器实现
1. 引入DPlayer所需的JS和CSS:
在/template/模板目录/common/header_common.php文件内:
<script src="https://cdn.bootcss.com/webtorrent/0.107.16/webtorrent.min.js"></script> <script src="https://cdn.bootcss.com/flv.js/1.5.0/flv.min.js"></script> <script src="https://cdn.bootcss.com/dashjs/3.0.0/dash.all.min.js"></script> <script src="https://cdn.bootcss.com/hls.js/8.0.0-beta.3/hls.min.js"></script> <link href="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/dplayer/1.25.0/DPlayer.min.js"></script>
注:webtorrent,flv,dash,hls可按需引入,DPlayer.min.css一定要在DPlayer.min.js前加载!
2. 在Discuz!后台-界面-编辑器设置-编辑 Discuz! 代码新建一个Discuz! 代码,标签为video,显示顺序自己调整,我的为10,图标文件为video.gif,链接:video.gif
直接下载我的图标文件然后放到/static/image/common/目录下就可以了
3. 进入代码详情,替换内容为:
<div id="dplayer"></div> <script type="text/javascript"> const dp = new DPlayer({ container: document.getElementById('dplayer'), video: { url : '{1}', type : 'auto', }, }); </script>
参数个数为1
例子,解释,嵌套次数,参数提示语,允许使用此代码的用户组请按需设置
接下来请使用吧,在帖子编辑内使用就好了
原文连接:https://www.lovewx.club/dplayer-for-discuz/
ckplayer for discuz
注:本教程支持手机版,支持手机版,支持手机版!!!
并且,默认使用了html5来进行播放,需要服务端支持206响应,如果遇到flv等格式会自动切换flash。
本次升级是一次非常大的升级行为,跟之前版本基本毫无联系。调用播放器的代码更加简单高效智能化。
如果你以前使用了发布的6.7版本,升级需要完全删除源ckplayer文件夹并重新替换新版本,或者备份更名源文件夹名称。
下载后,上传解压到discuz网站根目录,然后进入后台,界面-编辑器设置-Discuz!代码添加标签ckplayer,图标文件 / 描述ck.png
点击详情进入编辑替换内容:
<script type="text/javascript" src="./ckplayer/ckplayer.js"></script> <div id="video" style="width:854px;height:480px;"></div> <script type="text/javascript"> var videoObject = { container: '#video', variable: 'player', video:'{1}' }; var player=new ckplayer(videoObject); </script>
或者你服务端不支持206响应依旧想用以前6.7时候的flash模式,全用200状态码输出视频并且支持flv
<embed src="./ckplayer/ckplayer.swf" flashvars="video={1}" quality="high" width="854" height="480" align="middle" allowScriptAccess="always" allowFullscreen="true" type="application/x-shockwave-flash"></embed>
例子:
[ck]内容[/ck]
解释:
ckplayer视频播放器
参数个数:
1
参数提示语:
{1}直链地址
嵌套次数:1
允许使用此代码的用户组:
这个就自己设定了
做好这一切就可以在论坛用这个按钮发布帖子了
原文出处:http://bbs.itzmx.com/thread-20576-1-1.html
wprdpress twentyfifteen主题点击图片打开博文
在twentyfifteen文件夹下找到content.php,在第29行<div class=”entry-content”>下添加如下代码即可:
<a class="entry-thumbnail" href="<?php the_permalink(); ?>" target="_blank">
全站黑白色
下面我就附上开启全站黑白的教程和代码吧,只需要一句 CSS 定义即可,要将整个网站变成灰色调,你不用去一张一张的改图片的色调,只需要在 css 文件的 html 节点上添加下面一条定义。
方法一:
html {-webkit-filter: grayscale(100%);}
如果你的网站没有引用 css 文件,那么就可以直接引用下面这段 html 代码
<style type="text/css">html {-webkit-filter: grayscale(100%);}</style>
上面的 CSS 代码可能只对主流浏览器支持,如果你需要支持 QQ 浏览器、360 浏览器、IE 浏览器等等其他浏览器需要使用下面这段:
<style> html { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); _filter:none; } </style>
将代码放入前即可让对应网页变黑灰色!filter 是滤镜的意思,filter:gray 的意思就是说给页面加上一个灰度的滤镜,所以 html 里面的所有内容都会变成黑白的了。不过这个滤镜对于 chrome 和 safari 浏览器是无效的,所以下面会有一行-webkit-filter: grayscale(100%);这个样式是专属于使用 webkit 内核的浏览器的,意思和 FILTER: gray;差不多,只是写法不同罢了。
方法二:
下面这段代码可以变网页为黑白,将代码加到 CSS 最顶端就可以实现素装,如果网站没有使用 CSS,可以在网页/模板的 HTML 代码和 之间插入:
<style>html {filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter: grayscale(100%);}</style>
有一些站长的网站可能使用这个 css 不能生效,是因为网站没有使用最新的网页标准协议:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
请将网页最头部的替换为以上代码。有一些网站 FLASH 动画的颜色不能被 CSS 滤镜控制,可以在 FLASH 代码的和之间插入:
<param value="false" name="menu"/> <param value="opaque" name="wmode"/>
zfaka二维码页面添加支付宝跳转连接文件的目录
文件目录在
/public/templates/shadan/js/productpay.js
websocket+tls+v2ray 宝塔
1、使用一键安装脚本安装v2ray程序,选择选项4 websocket+tls,配置域名端口等信息并且选择不自动设置 TLS。
2、在宝塔中建立 一个相同域名的网站,填上SSL并修改网站配置文件,在配置文件的最后一个括号前添加如下代码并保存:
location / { proxy_redirect off; proxy_pass http://127.0.0.1:第一步设置的端口; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; }
3、停止并启动网站,然后获取连接即可。注意使用域名口端口一律为443。
用cloudflare workers搭建维基百科镜像站
整站代理:
// 你要镜像的网站. const upstream = 'zh.wikipedia.org' // 镜像网站的目录,比如你想镜像某个网站的二级目录则填写二级目录的目录名,镜像 google 用不到,默认即可. const upstream_path = '/' // 镜像站是否有手机访问专用网址,没有则填一样的. const upstream_mobile = 'zh.m.wikipedia.org' // 屏蔽国家和地区. const blocked_region = ['KP', 'SY', 'PK', 'CU'] // 屏蔽 IP 地址. const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // 镜像站是否开启 HTTPS. const https = true // 文本替换. const replace_dict = { '$upstream': '$custom_domain', '老地址': '新地址' } // 以下保持默认,不要动 addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = request.headers.get('user-agent'); let response = null; let url = new URL(request.url); let url_hostname = url.hostname; if (https == true) { url.protocol = 'https:'; } else { url.protocol = 'http:'; } if (await device_status(user_agent)) { var upstream_domain = upstream; } else { var upstream_domain = upstream_mobile; } url.host = upstream_domain; if (url.pathname == '/') { url.pathname = upstream_path; } else { url.pathname = upstream_path + url.pathname; } if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if (blocked_ip_address.includes(ip_address)) { response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else { let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', url.hostname); new_request_headers.set('Referer', url.hostname); let original_response = await fetch(url.href, { method: method, headers: new_request_headers }) let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials', true); new_response_headers.delete('content-security-policy'); new_response_headers.delete('content-security-policy-report-only'); new_response_headers.delete('clear-site-data'); const content_type = new_response_headers.get('content-type'); if (content_type.includes('text/html') && content_type.includes('UTF-8')) { original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname); } else { original_text = original_response_clone.body } response = new Response(original_text, { status, headers: new_response_headers }) } return response; } async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text() var i, j; for (i in replace_dict) { j = replace_dict[i] if (i == '$upstream') { i = upstream_domain } else if (i == '$custom_domain') { i = host_name } if (j == '$upstream') { j = upstream_domain } else if (j == '$custom_domain') { j = host_name } let re = new RegExp(i, 'g') text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; }
密码访问:
// 替换成你想镜像的站点 const upstream = 'google.com' // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = 'm.google.com' // 密码访问 const openAuth = false const username = 'username' const password = 'password' // 你希望禁止哪些国家访问 const blocked_region = ['RU'] // 禁止自访问 const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // 替换成你想镜像的站点 const replace_dict = { '$upstream': '$custom_domain', '//google.com': '' } function unauthorized() { return new Response('Unauthorized', { headers: { 'WWW-Authenticate': 'Basic realm="goindex"', 'Access-Control-Allow-Origin': '*' }, status: 401 }); } function parseBasicAuth(auth) { try { return atob(auth.split(' ').pop()).split(':'); } catch (e) { return []; } } function doBasicAuth(request) { const auth = request.headers.get('Authorization'); if (!auth || !/^Basic [A-Za-z0-9._~+/-]+=*$/i.test(auth)) { return false; } const [user, pass] = parseBasicAuth(auth); return user === username && pass === password; } async function fetchAndApply(request) { if (request.method === 'OPTIONS') // allow preflight request return new Response('', { status: 200, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*', 'Access-Control-Allow-Methods': 'GET, POST, PUT, HEAD, OPTIONS' } }); if (openAuth && !doBasicAuth(request)) { return unauthorized(); } const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = request.headers.get('user-agent'); let response = null; let url = new URL(request.url); let url_host = url.host; if (url.protocol == 'http:') { url.protocol = 'https:' response = Response.redirect(url.href); return response; } if (await device_status(user_agent)) { upstream_domain = upstream } else { upstream_domain = upstream_mobile } url.host = upstream_domain; if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if(blocked_ip_address.includes(ip_address)){ response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else{ let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', upstream_domain); new_request_headers.set('Referer', url.href); let original_response = await fetch(url.href, { method: method, headers: new_request_headers }) let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials', true); new_response_headers.delete('content-security-policy'); new_response_headers.delete('content-security-policy-report-only'); new_response_headers.delete('clear-site-data'); const content_type = new_response_headers.get('content-type'); if (content_type.includes('text/html') && content_type.includes('UTF-8')) { original_text = await replace_response_text(original_response_clone, upstream_domain, url_host); } else { original_text = original_response_clone.body } response = new Response(original_text, { status, headers: new_response_headers }) } return response; } addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request).catch(err => { console.error(err); new Response(JSON.stringify(err.stack), { status: 500, headers: { 'Content-Type': 'application/json' } }); })); }) async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text() var i, j; for (i in replace_dict) { j = replace_dict[i] if (i == '$upstream') { i = upstream_domain } else if (i == '$custom_domain') { i = host_name } if (j == '$upstream') { j = upstream_domain } else if (j == '$custom_domain') { j = host_name } let re = new RegExp(i, 'g') text = text.replace(re, j); } return text; } async function device_status (user_agent_info) { var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; }
指定目录访问:
// 你要镜像的网站. const upstream = 'objectstorage.ap-seoul-1.oraclecloud.com' // 镜像网站的目录,比如你想镜像某个网站的二级目录则填写二级目录的目录名,镜像 google 用不到,默认即可. const upstream_path = '/test/' // 镜像站是否有手机访问专用网址,没有则填一样的. const upstream_mobile = 'objectstorage.ap-seoul-1.oraclecloud.com' // 屏蔽国家和地区. const blocked_region = [''] // 屏蔽 IP 地址. const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // 镜像站是否开启 HTTPS. const https = true // 文本替换.填你要镜像的网站 const replace_dict = { '$upstream': '$custom_domain', '//objectstorage.ap-seoul-1.oraclecloud.com': '' } // 以下保持默认,不要动 addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" let response = null; let url = new URL(request.url); let url_hostname = url.hostname; if (https == true) { url.protocol = 'https:'; } else { url.protocol = 'http:'; } if (await device_status(user_agent)) { var upstream_domain = upstream; } else { var upstream_domain = upstream_mobile; } url.host = upstream_domain; if (url.pathname == '/') { url.pathname = upstream_path; } else { url.pathname = upstream_path + url.pathname; } if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if (blocked_ip_address.includes(ip_address)) { response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else { let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', url.hostname); new_request_headers.set('Referer', url.hostname); let original_response = await fetch(url.href, { method: method, headers: new_request_headers }) let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials', true); new_response_headers.delete('content-security-policy'); new_response_headers.delete('content-security-policy-report-only'); new_response_headers.delete('clear-site-data'); const content_type = new_response_headers.get('content-type'); if (content_type.includes('text/html') && content_type.includes('UTF-8')) { original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname); } else { original_text = original_response_clone.body } response = new Response(original_text, { status, headers: new_response_headers }) } return response; } async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text() var i, j; for (i in replace_dict) { j = replace_dict[i] if (i == '$upstream') { i = upstream_domain } else if (i == '$custom_domain') { i = host_name } if (j == '$upstream') { j = upstream_domain } else if (j == '$custom_domain') { j = host_name } let re = new RegExp(i, 'g') text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; }
更新:解决workers.dev被墙的问题。
1、在cloudflare DNS下解析域名到任意IP,并开通cdn。
2、在cloudflare域名下添加workers路由,格式为 xxx.domain.com/*,并指向对应的workers即可解决被墙问题
使用宝塔搭建维基百科镜像站(替换页面网址的代码)
使用宝塔创建好网站。
新版宝塔面板直接在反向代理的替换地址填写上需要替换的地址。例如upload.wikimedia.org,wikimedia.org
第二种方法,修改网站配置文件。在配置文件中添加如下两行代码
sub_filter "upload.wikimedia.org" "wikipic.kongwuzi.workers.dev"; sub_filter "wikimedia.org" "wikimedia.kongwuzi.workers.dev";