1、使用 admin@example.com 账号登录
2、单击右上角“管理区域”
3、单击左下角“设置”
4、取消“开启注册”
出处:http://tieba.baidu.com/p/6487351444?red_tag=i1920764958
Win10系统
方案一
左下角菜单打开后搜索“防火墙和系统保护”→找到并点击“高级设置”→点击“出站规则”→点击“新建规则”→要创建的规则类型“程序”,下一步→此程序路径,默认路径是“C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe”,建议点击“浏览”,自己去去找到Adobe Reader安装目录下AcroRd32这个程序,下一步→“阻止连接”,下一步→何时应用该规则,全选,下一步→自己取个名称,例如“Adobe ReaderXI阻止出站连接”,完成。
然后再试试打开PDF文件是否5-10秒退出,我自己的完美解决~供参考
断网有用感谢!估计是官方后台连接搞得鬼!我用的方法是: 开始-控制面板-系统和安全-Windows防火墙-高级设置-出站规则-新建规则-程序-下一步-此程序路径-下一步-阻止连接-何时应用该规则 ?(全选)-下一步-自定义一个名称-完成。重启! (我搞了半天才搞定,希望大家也有用
方案二
在C:\Windows\System32\drivers\etc\hosts 文件里添加项
127.0.0.1 acroipm.adobe.com #阻止adobe reader的网问题解决
Composer (on Windows) – Either the ‘extension_dir’ value is incorrect or the dll does not exist.
Nginx
location / {
try_files $uri $uri/ /index.php$is_args$query_string;
}
参考:https://www.devexpress.com/Support/Center/Question/Details/K18445/how-to-create-a-correct-connection-string-for-xpo-providers
AccessConnectionProvider: MSAccess
XpoProvider=MSAccess;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=;
DataSetDataStore: XmlDataSet
XpoProvider=XmlDataSet;Data Source=C:\mydatabase.xml;Read Only=false
InMemoryDataStore: InMemoryDataStore
XpoProvider=InMemoryDataStore;Data Source=C:\mydatabase.xml;Read Only=false
MSSqlConnectionProvider: MSSqlServer
XpoProvider=MSSqlServer;Data Source=(local);User ID=username;Password=password;Initial Catalog=database;Persist Security Info=true
AdvantageConnectionProvider: Advantage
XpoProvider=Advantage;Data Source=\myserver\myvolume\mypat\mydd.add;ServerType=local;User ID=ASSSYS;TrimTrailingSpaces=true
AsaConnectionProvider: Asa
XpoProvider=Asa;Uid=MyUsername;PWD=MyPassword;DBF=c:\mydatabase.db;Persist Security Info=true
AseConnectionPrvider: Ase
XpoProvider=Ase;Port=5000;Data Source=MyAseServer;User ID=MyUserName;Password=MyPassword;Initial Catalog=MyDatabase;Persist Security Info=true
DB2ConnectionProvider: DB2
XpoProvider=DB2;Server=MyAddress:MyPortNumber;User ID=MyUserName;Password=MyPassword;Database=MyDatabase;Persist Security Info=true
FirebirdConnectionProvider: Firebird
XpoProvider=Firebird;DataSource=localhost;User=SYSDBA;Password=masterkey;Database=MyDatabase.fdb;ServerType=0;Charset=NONE
MSSqlCEConnectionProvider: MSSqlServerCE
XpoProvider=MSSqlServerCE;Data Source=MyDatabase.sdf;Password=MyPassword
MySqlConnectionProvider: MySql
XpoProvider=MySql;Server=MyServerAddress;User ID=MyUserName;Password=MyPassword;Database=MyDatabase;Persist Security Info= true;Charset=utf8
ODPConnectionProvider: ODP
XpoProvider=ODP;Data Source=TORCL;User ID=MyUserName;Password=MyPassword
ODPManagedConnectionProvider: ODPManaged
XpoProvider=ODPManaged;Data Source=TORCL;User ID=MyUserName;Password=MyPassword
OracleConnectionProvider: Oracle
XpoProvider=Oracle;Data Source=TORCL;User ID=MyUserName;Password=MyPassword
PervasiveSqlConnectionProvider: Pervasive
XpoProvider=Pervasive;Server=MyServerAddress;UID=MyUserName;PWD=MyPassword;ServerDSN=MyDatabase
PostgreSqlConnectionProvider: Postgres
XpoProvider=Postgres;Server=127.0.0.1;User ID=MyUserName;Password=MyPassword;Database=MyDatabase;Encoding=UNICODE
SQLiteConnectionProvider: SQLite
XpoProvider=SQLite;Data Source=filename
VistaDBConnectionProvider: VistaDB
XpoProvider=VistaDB;Data Source=C:\mydatabase.vdb4
VistaDB5ConnectionProvider: VistaDB5
XpoProvider=VistaDB5;Data Source=C:\mydatabase.vdb5
1、blade 模板,模型关联为空值时,如何传值?
根据 $product->brand的值,显示对应名称
product.blade.php
productitem.blade.php
2、目录权限
在安装 Laravel 后,你可能需要配置一些权限。 storage 和 bootstrap/cache 目录在你的 web 服务下应该是可写的权限,否则 Laravel 将无法运行。如果你用的是 Homestead 虚拟机,这些权限应该已经设置好了。
3、php 安装 fileInfo扩展
4、提示“The Mix manifest does not exist.”
参考:https://xueyuanjun.com/post/19944.html 检查 public目录下是否有mix-manifest.json 文件,没有的话,通过以下步骤生成 1)检查 node,npm是否正确安装。 2)运行 npm install,Windows系统运行 npm install --no-bin-links 3)运行 Mix,npm run production
return json($result);
1、路由
Route::rule('fileUpload/:dir','index/FileUpload/index');
2、页面主要内容
$('#exampleModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget)
var imgpath = button.data('imgpath')
var title = button.data('imgtitle')
var info = button.data('productinfo')
var productid = button.data('productid')
if (productid === undefined) {
window.alert("productid 未定义");
}
var modal = $(this)
modal.find('.modal-title').text(title)
//单图
//modal.find('.modal-body img').attr('src',imgpath)
modal.find('.modal-footer .info').text(info)
//设置当前 productid
modal.find('#productid').attr('value', productid)
//设置上传表单productid
modal.find('#productid').attr('value', productid)
//清空元素
modal.find('.carousel-indicators').empty()
modal.find('.carousel-inner').empty()
var productid = $('#productid').attr('value');
var formData = new FormData();
formData.append('productid', productid);
formData.append('refresh', 1);
$.ajax({
type: 'post',
cache: false,
url: '/index.php/fileUpload/product',
data: formData,
processData: false, // 不处理数据
contentType: false, // 不设置内容类型
dataType: "json",
success: function (data) {
if (data['status'] == 1) {
var modal = $('#exampleModal')
var images = data['images']// button.data('images')
var init = true;
//重新添加图片
for (var key in images) {
if (init) {
modal.find('.carousel-indicators').append("<li data-target=\"#carouselExampleIndicators\" data-slide-to=\"" + key + "\" class=\"active\"></li>")
modal.find('.carousel-inner').append(" <div class=\"carousel-item active\"> <center><img class=\"ProductImages\" src=\"" + images[key]['file_path'] + "\"/></center> </div>")
init = false;
} else {
modal.find('.carousel-indicators').append("<li data-target=\"#carouselExampleIndicators\" data-slide-to=\"" + key + "\"></li>")
modal.find('.carousel-inner').append(" <div class=\"carousel-item\"> <center><img class=\"ProductImages\" src=\"" + images[key]['file_path'] + "\"/></center> </div>")
}
}
} else {
alert("更新出错")
}
},
error: function (data) {
alert('更新出错');
}
})
})
$('#submit').on('click', function (event) {
var formData = new FormData();
formData.append('image', $('#file')[0].files[0]);
formData.append('productid', $('#productid').attr('value'));
formData.append('refresh', 0);
$.ajax({
type: 'post',
cache: false,
url: '/index.php/fileUpload/product',
data: formData,
processData: false, // 不处理数据
contentType: false, // 不设置内容类型
dataType: "json",
success: function (data) {
if (data['status'] == 1) {
var modal = $('#exampleModal')
var images = data['images']// button.data('images')
//清空元素
modal.find('.carousel-indicators').empty()
modal.find('.carousel-inner').empty()
//重新添加图片
for (var key in images) {
//确保刚上传的文件被激活
if (key == (images.length - 1)) {
modal.find('.carousel-indicators').append("<li data-target=\"#carouselExampleIndicators\" data-slide-to=\"" + key + "\" class=\"active\"></li>")
modal.find('.carousel-inner').append(" <div class=\"carousel-item active\"> <center><img class=\"ProductImages\" src=\"" + images[key]['file_path'] + "\"/></center> </div>")
} else {
modal.find('.carousel-indicators').append("<li data-target=\"#carouselExampleIndicators\" data-slide-to=\"" + key + "\"></li>")
modal.find('.carousel-inner').append(" <div class=\"carousel-item\"> <center><img class=\"ProductImages\" src=\"" + images[key]['file_path'] + "\"/></center> </div>")
}
}
// alert('上传完成!')
} else {
alert('上传错误')
}
},
error: function (data) {
alert('上传错误');
}
})
})
})
//...
<div class="ProductPreview">
{notempty name='$product.qrcode.file_path')}
<img src="{$product.qrcode.file_path}" data-toggle="modal" data-target="#exampleModal" data-imgpath="{$product.qrcode.file_path}"
data-imgtitle="{$product.name}" data-productinfo="{$product.type.name} / {$product.model}" data-images="{$product.images}"
data-productid="{$product.id}">
</a>
{else/}
<img data-toggle="modal" data-target="#exampleModal" data-imgpath="{$product.qrcode.file_path}" data-imgtitle="{$product.name}"
data-productinfo="{$product.type.name} / {$product.model}" data-images="{$product.images}" data-productid="{$product.id}">
</a>
{/notempty}
</div>
//...
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!-- 单图 -->
<!--
<center><img src="" style="width:auto;height:auto;max-height:300px;max-width:100%;" /></center>
-->
<!-- 多图 -->
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<!--
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
-->
</ol>
<div class="carousel-inner">
<!-- 原案例 -->
<!--
<div class="carousel-item active">
<img class="d-block w-100" src="data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%22800%22%20height%3D%22400%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20800%20400%22%20preserveAspectRatio%3D%22none%22%3E%3Cdefs%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%23holder_164b27b1eb7%20text%20%7B%20fill%3A%23555%3Bfont-weight%3Anormal%3Bfont-family%3AHelvetica%2C%20monospace%3Bfont-size%3A40pt%20%7D%20%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22holder_164b27b1eb7%22%3E%3Crect%20width%3D%22800%22%20height%3D%22400%22%20fill%3D%22%23777%22%3E%3C%2Frect%3E%3Cg%3E%3Ctext%20x%3D%22285.921875%22%20y%3D%22217.7%22%3EFirst%20slide%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E" alt="First slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%22800%22%20height%3D%22400%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20800%20400%22%20preserveAspectRatio%3D%22none%22%3E%3Cdefs%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%23holder_164b27b1eb7%20text%20%7B%20fill%3A%23555%3Bfont-weight%3Anormal%3Bfont-family%3AHelvetica%2C%20monospace%3Bfont-size%3A40pt%20%7D%20%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22holder_164b27b1eb7%22%3E%3Crect%20width%3D%22800%22%20height%3D%22400%22%20fill%3D%22%23777%22%3E%3C%2Frect%3E%3Cg%3E%3Ctext%20x%3D%22285.921875%22%20y%3D%22217.7%22%3EFirst%20slide%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E" alt="Second slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%22800%22%20height%3D%22400%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20800%20400%22%20preserveAspectRatio%3D%22none%22%3E%3Cdefs%3E%3Cstyle%20type%3D%22text%2Fcss%22%3E%23holder_164b27b1eb7%20text%20%7B%20fill%3A%23555%3Bfont-weight%3Anormal%3Bfont-family%3AHelvetica%2C%20monospace%3Bfont-size%3A40pt%20%7D%20%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cg%20id%3D%22holder_164b27b1eb7%22%3E%3Crect%20width%3D%22800%22%20height%3D%22400%22%20fill%3D%22%23777%22%3E%3C%2Frect%3E%3Cg%3E%3Ctext%20x%3D%22285.921875%22%20y%3D%22217.7%22%3EFirst%20slide%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E" alt="Third slide">
</div>
-->
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="PrevIcon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="NextIcon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<center>
<form id="uploadForm" enctype="multipart/form-data">
<div class="input-group">
<input type="file" name="image" class="form-control" id="file" />
<div class="input-group-prepend">
<div class="input-group-text" id="btnGroupAddon">
<input type="button" value="上传" id="submit" />
<input type="hidden" name="productid" id="productid" value="" />
</div>
</div>
</div>
<br>
</form>
</center>
</div>
<div class="modal-footer">
<h6 class="info">info</h6>
</div>
</div>
</div>
</div>
3、后台
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\File;
use app\index\model\ProductModel;
use app\index\model\ExtraProductModel;
class FileUploadController extends Controller
{
public function index($dir){
$id=request()->param('productid');
$refresh=request()->param('refresh');
$result;
if($refresh==1){
$product=ProductModel::where('id', $id)->find();
$images=$product->images;
$result['status']=1;
$result['images']=$images;
}else{
$file =request()->file('image');
// 移动到框架应用根目录/public/uploads/ 目录下
if($file){
$info = $file->move(UPLOAD_PATH.$dir);
if($info){
$extraProduct =new ExtraProductModel();
$extraProduct->name=$info->getFilename();
$extraProduct->file_path='/upload/'.$dir.'/'.$info->getSaveName();
$extraProduct->product_id=$id;
$extraProduct->save();
$product=ProductModel::where('id', $id)->find();
$images=$product->images;
$result['status']=1;
$result['images']=$images;
}else{
$result['status']=0;
}
}else{
$result['status']=0;
}
}
return $result;
}
}
1、移动端手势滑动事件
$(function () {
// 获取手指在轮播图元素上的一个滑动方向(左右)
// 获取界面上轮播图容器
var $carousels = $('.carousel');
var startX,endX;
// 在滑动的一定范围内,才切换图片
var offset = 50;
// 注册滑动事件
$carousels.on('touchstart',function (e) {
// console.log(e);
// 手指触摸开始时记录一下手指所在的坐标x
startX = e.originalEvent.touches[0].clientX;
});
$carousels.on('touchmove',function (e) {
// 目的是:记录手指离开屏幕一瞬间的位置 ,用move事件重复赋值
endX = e.originalEvent.touches[0].clientX;
});
$carousels.on('touchend',function (e) {
//console.log(endX);
//结束触摸一瞬间记录手指最后所在坐标x的位置 endX
//比较endX与startX的大小,并获取每次运动的距离,当距离大于一定值时认为是有方向的变化
var distance = Math.abs(startX - endX);
if (distance > offset){
//说明有方向的变化
//根据获得的方向 判断是上一张还是下一张出现
$(this).carousel(startX >endX ? 'next':'prev');
}
})
});
2、去除 ul li 间的间隔
ul{
list-style-type: none;
margin:0px;
padding:0px;
}