zarocknz / silverstripe-geodata-uploadfield
地理位置文件上传字段(用于照片等)
Requires
- php: >=5.3.0
- composer/installers: ~1.0
- silverstripe/framework: ^3.1
This package is not auto-updated.
Last update: 2024-09-26 00:24:46 UTC
README
用于带有谷歌地图的表单的文件上传字段,允许用户设置上传媒体的位置,例如照片。
当表单提交时,纬度、经度和缩放字段将保存到与上传字段对应的同一DataObject中。
如果文件中包含地理定位标签,一旦文件被选择,地图上的标记将自动移动到该位置(如果用户想要的话,可以手动调整)。
注意,目前这仅在前端表单上有效。
要求
* Silverstripe 3.1.x+
* JQuery-1.7.1+
使用示例
将以下字段添加到您的表单提交保存到的DataObject中...
'Latitude' => 'Varchar(255)', 'Longitude' => 'Varchar(255)', 'Zoom' => 'Int',
同时确保您的数据对象有一个图像(或其他允许文件上传的对象)...
private static $has_one = array( 'Image' => 'Image', );
然后使用GeodataUploadField创建表单,而不是使用普通的Silverstripe上传字段...
public function getFrontEndFields($params = null) { $fields = parent::getFrontEndFields($params); // Create GeoData Upload field. $upload = GeoDataUploadField::create('Image', 'Image'); // Set options to prevent selection of existing or access to the filesystem as per Silverstripe docs. $upload->setCanAttachExisting(false); $upload->setCanPreviewFolder(false); $fields->replaceField('Image', $upload); return $fields; }
构造函数选项
除了字段名称和标题之外,您还可以向构造函数传递一些其他内容。对于第三个参数,您可以传递一个数组,该数组将覆盖_config/geodata-uploadfield.yml中的默认地图选项。
如果您在DataObject中为纬度、经度或缩放字段指定了不同的名称,您需要将它们的名称作为最后三个参数传递给构造函数,否则在表单提交时将不会保存任何内容。
以下示例展示了创建一个GeoDataUploadField,传递一些选项和不同命名的lat和lng字段...
$upload = GeoDataUploadField::create( 'Image', // Name. 'Select an Image', // Title array( // Options. 'map' => array( 'zoom' => 10 ) ), 'theLatField', // Latitude field name. 'theLngField', // Longitude field name. 'theZomField' // Zoom field name. );
记住,只要您在数据对象上为纬度、经度和缩放字段命名,您就不需要将它们的名称传递给构造函数。
致谢
此模块主要基于Will Morgan和其他人编写的BetterBrief/silverstripe-googlemapfield,该模块具有BSD许可证。
此模块还包括Jacob Seidelin编写的JavaScript EXIF Reader - jQuery插件0.1.3,该插件具有MPL许可证。
我所做的只是将这两个模块结合起来,并根据项目需求进行了修改。
我要感谢这些仓库/库的创作者和贡献者。
维护者
zarocknz - https://github.com/zarocknz
待办事项
* Try to get this working CMS side.