【发布时间】:2014-09-19 07:41:22
【问题描述】:
概述
我正在开发一个基于 Wordpress 的网站,允许访问者在页面上的几个不同位置上传图片。我(经过大量试验和错误)得到了一些工作代码,但是由于每个“上传”区域之间的代码略有不同,我考虑尝试以“插件”的形式使其可重复使用。
我的背景
我是一名自学成才的程序员,所以我很容易犯很多错误,并且以完全不合逻辑的方式做事,而且在一行就足够的情况下编写了一千行代码。
问题的历史(请跳过此部分查看下面的代码)
我想我会包含一些历史记录,以免与X-Y Problem 发生冲突。我在网页上有 4 个地方可供访问者上传到网站。其中 3 个是图像上传,应该允许访问者也“裁剪”图像。我正在使用 jQuery 插件 plupload 和 jcrop 来提供功能。
最初,我尝试以页面在执行时将相关代码包含在 DOM 中的方式编写代码。为了在同一页面上有多个 plupload 实例,我创建了一个“动态变量”,然后像这样调用代码......
var dynamicPartOfVar = "imageUploadAreaOne";
imageManipulationObject["imageUploader"+dynamicPartOfVar] = new plupload.Uploader(plupload_init);
这很有效,但我发现如果代码在 DOM 中,那么它不会被浏览器缓存。所以我然后走上了为每个上传区域创建一个单独的 js 文件并“包含”它们并传递相关变量的路线:
wp_localize_script("imageUploadAreaOne", "inputVar", $relevantVariableArray);
wp_enqueue_script("imageUploadAreaOne");
但是,我很快意识到,如果我可以将不同的变量“传递”到同一个文件中,我可以只编写一组代码并(例如)传递一个名为“allowCropping”的变量,该变量将启用/禁用 jCrop 等。
问题
我有这样的代码(只是一个例子):
var isAdmin = inputVar.isAdmin;
var notAdmin = inputVar.notAdmin;
var thisUser = inputVar.thisUser;
var ajaxurl = inputVar.ajaxurl;
imageManipulationObject["imageUploader"+dynamicPartOfVar] = new plupload.Uploader(plupload_init);
imageManipulationObject["ProgressLoader"+dynamicPartOfVar] = $('#ProgressLoader'+dynamicPartOfVar).percentageLoader({width: 170, height: 170, progress:0.0});
/* **************************** */
// HIDE CROPPING DIV WHEN USER SELECTS A DIFFERENT IMAGE
/* **************************** */
$('.imageSelection').on('click', function() {
closeCropWindow();
});
$('.imageThumb').on('click', function() {
closeCropWindow();
});
HTML 示例
<div id="mainCropDivID<?php echo $this->dynamicPartOfVar; ?>">
<div class="outerCropDiv">
<div id="innerCropDivID<?php echo $this->dynamicPartOfVar; ?>" class="innerCropDiv">
<img class="croppingImage" id="croppingImageID<?php echo $this->dynamicPartOfVar; ?>" alt="Cropping Image" src="<?php echo $currentURL; ?>"/>
<div class="JTcentreDiv">
<form id="cropimg<?php echo $this->dynamicPartOfVar; ?>" name="cropimg" method="post" action="<?php echo $getPartOfURL; ?>">
<input type="hidden" id="x_<?php echo $this->dynamicPartOfVar; ?>" name="x">
<input type="hidden" id="y_<?php echo $this->dynamicPartOfVar; ?>" name="y">
<input type="hidden" id="w_<?php echo $this->dynamicPartOfVar; ?>" name="w">
<input type="hidden" id="h_<?php echo $this->dynamicPartOfVar; ?>" name="h">
<input type="hidden" name="typeOfImage" value="<?php echo $this->typeOfImage; ?>">
<input type="hidden" id="imageIDtoCrop<?php echo $this->dynamicPartOfVar; ?>" name="imageIDtoCrop" value="">
<input id="performCropButton<?php echo $this->dynamicPartOfVar; ?>" type="submit" value="Crop Image">
</form>
</div>
</div><!-- @end #innerCropDivID -->
</div><!-- @end .outerCropDiv -->
<div style="clear:both;"> </div>
</div> <!-- @end #mainCropDivID -->
假设将这一切封装在一个“插件”中是可行的方法。我该怎么做呢?我希望能够将变量传递到插件中,包括几个 DOM 元素(即,我想将包含需要裁剪的图像的 div、保存图像预览的 div、div保存当前上传的图像等)。加上其他变量,例如是否允许“裁剪”。
感谢您的帮助。
【问题讨论】:
-
所以你想将插件绑定到主要的图像元素? html 结构看起来如何(预览、上传 div 等)?
-
@Johan 我添加了一些 HTML 的示例。绘制所需元素的所有功能都在单独的函数中。例如,绘制打开裁剪窗口按钮的功能,仅在“裁剪”功能可用等情况下才需要。希望有所帮助。如果您需要更多信息,请告诉我。
标签: javascript php jquery wordpress