我有一个jQuery UI对话框,在单击特定元素时显示.如果点击发生在那些触发元素或对话框本身之外的任何地方,我想关闭对话框.
这是打开对话框的代码:
$(document).ready(function() {
var $field_hint = $('<div></div>')
.dialog({
autoOpen: false,
minHeight: 50,
resizable: false,
width: 375
});
$('.hint').click(function() {
var $hint = $(this);
$field_hint.html($hint.html());
$field_hint.dialog('option', 'position', [162, $hint.offset().top + 25]);
$field_hint.dialog('option', 'title', $hint.siblings('label').html());
$field_hint.dialog('open');
});
/*$(document).click(function() {
$field_hint.dialog('close');
});*/
});
Run Code Online (Sandbox Code Playgroud)
如果我取消注释最后一部分,则对话框永远不会打开.我认为这是因为打开对话框的相同点击再次关闭它.
最终工作代码
注意:这是使用jQuery外部事件插件
$(document).ready(function() {
// dialog element to .hint
var $field_hint = $('<div></div>')
.dialog({
autoOpen: false,
minHeight: 0,
resizable: false,
width: 376
})
.bind('clickoutside', function(e) {
$target = $(e.target);
if (!$target.filter('.hint').length
&& !$target.filter('.hintclickicon').length) {
$field_hint.dialog('close'); …Run Code Online (Sandbox Code Playgroud) 我*.sql在创建新的网站数据库时使用了两个文件.第一个文件创建所有表.第二个文件填充一些默认记录.我想从PHP执行这些文件.我也使用Zend_Framework,如果这将有助于实现这一目标.
附加信息
解
使用shell_exec()......
$command = 'mysql'
. ' --host=' . $vals['db_host']
. ' --user=' . $vals['db_user']
. ' --password=' . $vals['db_pass']
. ' --database=' . $vals['db_name']
. ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');
Run Code Online (Sandbox Code Playgroud)
...我从来没有得到有用的输出,但在另一个线程上遵循一些建议,最后让它全部工作.我切换到命令的格式,而不是执行文件.--option=value--execute="SOURCE ..."<
此外,我从来没有得到shell_exec()和和之间的差异的良好解释exec().
我将此ViewScript用于我的标准表单元素:
<div class="field" id="field_<?php echo $this->element->getId(); ?>">
<?php if (0 < strlen($this->element->getLabel())) : ?>
<?php echo $this->formLabel($this->element->getName(), $this->element->getLabel());?>
<?php endif; ?>
<span class="value"><?php echo $this->{$this->element->helper}(
$this->element->getName(),
$this->element->getValue(),
$this->element->getAttribs()
) ?></span>
<?php if (0 < $this->element->getMessages()->length) : ?>
<?php echo $this->formErrors($this->element->getMessages()); ?>
<?php endif; ?>
<?php if (0 < strlen($this->element->getDescription())) : ?>
<span class="hint"><?php echo $this->element->getDescription(); ?></span>
<?php endif; ?>
</div>
Run Code Online (Sandbox Code Playgroud)
尝试单独使用ViewScript会导致错误:
表单捕获的异常:找不到文件装饰器...无法呈现文件元素
看看这个FAQ揭示了我的部分问题,我更新了我的表单元素装饰器,如下所示:
'decorators' => array(
array('File'),
array('ViewScript', array('viewScript' => 'form/field.phtml'))
)
Run Code Online (Sandbox Code Playgroud)
现在它将文件元素渲染两次,一次在我的视图脚本中,以及在视图脚本之外使用文件元素的额外元素:
<input type="hidden" name="MAX_FILE_SIZE" value="8388608" id="MAX_FILE_SIZE" …Run Code Online (Sandbox Code Playgroud) zend-framework decorator zend-form zend-view zend-form-element
我需要改变输出Zend_View_Helper_Navigation_Menu.我发现了我需要修改的两个函数,我知道如何进行我需要的更改.我不知道的是如何使Navigation对象使用我的视图助手而不是Zend.
代表我的类扩展的代码段:
// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
protected function _renderDeepestMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth)
{
// modified code here
}
protected function _renderMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth,
$onlyActive)
{
// modified code here
}
}
Run Code Online (Sandbox Code Playgroud)
编辑澄清
我想更改<li>元素的类并删除EOL和缩进.使用菜单视图脚本没有选项可以做到这一点,这就是为什么我必须扩展它.
在我的Bootstrap中初始化导航对象:
$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));
Run Code Online (Sandbox Code Playgroud)
在我的布局中渲染菜单:
echo $this->navigation()->menu();
Run Code Online (Sandbox Code Playgroud)
解
我通过如下重命名来完成它的工作,但我不清楚为什么我不能重载/覆盖_Menu类和menu()函数.
My_View_Helper_Navigation_MyMenumyMenu函数添加到类(return parent::menu($container);)echo $this->navigation()->myMenu();在布局中调用类线框:
// …Run Code Online (Sandbox Code Playgroud) 我正在使用Zend Framework,我使用了.htaccess一些设置.我现在正在编写用于调度的命令行脚本(例如cron).命令行脚本不查看该.htaccess文件,因为它们不是由Apache提供的.我想解析.htaccess我的脚本来检索一些设置.以下是我特别感兴趣的专栏:
SetEnv APPLICATION_ENV development
php_value date.timezone America/New_York
Run Code Online (Sandbox Code Playgroud)
我注意到了PEAR File_HtAccess包,但它似乎只解决了.htaccess文件的身份验证部分.
解决方案:(由于Bamieater的信用)
echo 调试输出的语句,从工作代码中删除.
$htaccess = file(realpath(dirname(__FILE__)) . '/.htaccess');
echo '<pre>';
foreach ($htaccess as $line) {
if (preg_match('/^\s*SetEnv\s+APPLICATION_ENV\s+(.*?)\s*$/', trim($line), $matches)) {
defined('APPLICATION_ENV') || define('APPLICATION_ENV', $matches[1]);
echo APPLICATION_ENV . PHP_EOL;
} elseif (preg_match('/^\s*php_(?:admin_)?value\s+date\.timezone\s+(.*?)\s*$/', $line, $matches)) {
date_default_timezone_set($matches[1]);
echo date_default_timezone_get() . PHP_EOL;
}
}
echo '</pre>';
Run Code Online (Sandbox Code Playgroud) 我的应用程序基于Zend Framework.我正在使用Zend_Auth身份验证,但我不确定是否Zend_Acl会对我有用,因为坦率地说,我看到的例子对我的需求来说太简单了或者让我困惑.
我正在考虑将我的应用程序中的元素作为资源,这些资源可以拥有权限.包含资源权限的角色是动态定义的,分配给用户.我将这些信息存储在规范化表格中.
角色实际上只是资源权限的集合,没有层次结构.资源的一个例子是'Page'.每个人都可以查看页面,但经过身份验证的用户需要"添加","编辑"或"删除"权限才能对页面执行任何其他操作.
这与Zend ACL相匹配吗?我是否会以一种会给我带来问题的方式思考ACL?
我的解决方案
Typeonerror获得了荣誉,但这是我的具体解决方案.
我扩展了Zend_Acl以简化我的使用,因为我只加载当前用户的角色:
class My_Acl extends Zend_Acl
{
protected $_role_id;
public function setRole($role_id)
{
$this->_role_id = $role_id;
return $this->addRole($role_id);
}
public function getRole()
{
return $this->_role_id;
}
public function deny($resource, $privilege)
{
return parent::deny($this->_role_id, $resource, $privilege);
}
public function allow($resource, $privilege)
{
return parent::allow($this->_role_id, $resource, $privilege);
}
public function isAllowed($resource, $privilege)
{
return parent::isAllowed($this->_role_id, $resource, $privilege);
}
}
Run Code Online (Sandbox Code Playgroud)
要填充的ACL我执行一个查询返回resource,privilege和role_id列.该 …
我想制作会话cookie HttpOnly.根据这篇文章,我将此添加到我的application.ini:
resources.session.cookie_httponly = true
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我在Firecookie中查看会话cookie时,它没有HttpOnly像我指定的那样标记.我错过了什么步骤?

我有照片库代码,可以进行图像重新调整大小和创建缩略图.我使用ImageMagick来做到这一点.我通过Google的Page Speed工具运行了一个图库页面,它显示重新调整大小的图像和缩略图都有大约10KB的数据(特别是JPEG文件).
我可以在脚本中添加什么来优化文件大小?
附加信息
我在调用函数时使用的imagick::FILTER_LANCZOS模糊设置过滤器.JPEG的质量设置为.0.9resizeImage()80
给出以下表结构:
countries: id, name
regions: id, country_id, name, population
cities: id, region_id, name
Run Code Online (Sandbox Code Playgroud)
......而这个查询......
SELECT c.name AS country, COUNT(DISTINCT r.id) AS regions, COUNT(s.id) AS cities
FROM countries AS c
JOIN regions AS r ON r.country_id = c.id
JOIN cities AS s ON s.region_id = r.id
GROUP BY c.id
Run Code Online (Sandbox Code Playgroud)
我将如何添加SUM了的regions.population值来计算该国的人口?我需要在求和时仅使用每个区域的值一次,但是未分组的结果对于每个区域(该区域中的城市数量)具有多个行.
示例数据:
mysql> SELECT * FROM countries;
+----+-----------+
| id | name |
+----+-----------+
| 1 | country 1 |
| 2 | country 2 |
+----+-----------+
2 …Run Code Online (Sandbox Code Playgroud) 我正在为我的活动日历应用程序添加一项功能,以便为事件提供iCalendar(ics)文件下载.我想生成VTIMEZONEComponent,但我所拥有的只是PHP的Timezone值date_default_timezone_get().以下VTIMEZONE是Outlook生成的东部时间组件(美国和加拿大)的示例:
BEGIN:VTIMEZONE
TZID:Eastern Time (US & Canada)
BEGIN:STANDARD
DTSTART:16011104T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010311T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
END:VTIMEZONE
Run Code Online (Sandbox Code Playgroud)
这会像PHP的"America/New_York"时区一样,但是我如何自动生成呢?