我有一个整数列,我想添加一个外键约束.唯一的问题是,如果该列没有/需要一个值,默认情况下MySQL会输入一个'0'值.这显然打破了外键约束,因为主表中没有PK为0的记录.
我怎样才能克服这个问题?
如何在DIV上设置左右按钮以水平滚动内容?我不需要显示滚动条.
HMTL:
<div id="browser">
<a href="#" id="left-button"><img src="left-button.jpg" /></a>
<img src="thumb_1.jpg" />
<img src="thumb_2.jpg" />
<img src="thumb_3.jpg" />
<img src="thumb_4.jpg" />
<img src="thumb_5.jpg" />
<img src="thumb_6.jpg" />
<a href="#" id="right-button"><img src="right-button.jpg" /></a>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
#browser { float: left; width: 200px; overflow: hidden; white-space: nowrap; }
Run Code Online (Sandbox Code Playgroud) 使用"基本"应用程序模板,设置与主站点登录分开的模块登录的正确方法是什么?
例如,我有一个"admin"模块,需要登录.我还需要用户登录主站点.
我做了以下事情:
admin使用gii工具创建模块models在admin模块文件夹中创建文件夹LoginForm.php和User.php此文件夹中(还更新这些文件中的命名空间声明)AccessControl行为和登录/注销操作modules\admin\controllers\DefaultController.php更新config\web.php如下:
'modules' => [
'admin' => [
'class' => 'app\modules\admin\Module',
],
],
Run Code Online (Sandbox Code Playgroud)更新app\modules\admin\Module.php如下:
public function init()
{
parent::init();
Yii::$app->set('user', [
'class' => 'yii\web\User',
'identityClass' => 'app\modules\admin\models\User',
'enableAutoLogin' => true,
'loginUrl' => ['admin/default/login'],
]);
Yii::$app->set('session', [
'class' => 'yii\web\Session',
'name' => '_adminSessionId',
]);
}
Run Code Online (Sandbox Code Playgroud)我遇到的问题是,如果我在未登录时尝试访问管理页面,则会显示登录表单(这是正确的).但是在登录时,它只是将我重定向回主站点.它应该将我重定向到我试图访问的管理页面.
在DefaultController.php,它具有以下(默认代码):
if ($model->load(Yii::$app->request->post()) && $model->login())
return $this->goBack();
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么,以便我可以为管理模块和主站点进行独立登录?我不想使用"高级应用程序模板",因为这会增加一些不必要的复杂性.
创建无密码登录系统的最佳方法是什么?
我正在考虑使用某种随机生成的16个字符标记,例如:
mysite的/构件/的index.php?标记= 2j0n1qyjgcxyu3oy
我正在开发一个报价系统,其想法是供应商不必注册,而是我为他们创建帐户,他们所要做的就是点击他们电子邮件中的链接以提交报价.这将鼓励供应商提交报价,因为他们知道他们不需要注册或登录.
如果他们碰巧猜到令牌,那么有人可以做的伤害并不大,但我仍然希望在不需要密码的情况下使系统尽可能安全.
我基本上尝试使用Yii中的CActiveForm类创建一个多步骤表单.我的想法是希望使用内置功能以最简单的方式实现这一点.我的要求如下:
validateOnChange()和validateOnSubmit()方法这是我迄今为止开发的半工作解决方案:
视图:
<div class="form">
<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'listing-form',
'enableClientValidation'=>false,
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnChange'=>true,
'validateOnSubmit'=>true,
'afterValidate'=>'js:validateListing',
),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="step" id="step-1">
// model input fields
<?php echo CHtml::submitButton('Next Step', array('name'=>'step1')); ?>
</div>
<div class="step" id="step-2" style="display: none;">
// model input fields
<?php echo CHtml::submitButton('Next Step', array('name'=>'step2')); ?>
</div>
<div class="step" id="step-3" style="display: none;">
// model input fields
<?php echo CHtml::submitButton('Submit', array('name'=>'step3')); ?>
</div>
<?php $this->endWidget(); ?> …Run Code Online (Sandbox Code Playgroud) 我正在使用jQuery函数来克隆包含一组输入元素的DIV:
<div class="history-form-fields">
<div class="row">
<label for="History_0_type">Type</label>
<select name="History[0][type]" id="History_0_type">
<option value="">Select</option>
</select>
</div>
<div class="row">
<label for="History_0_name">Name</label>
<input type="text" name="History[0][name]" id="History_0_name" />
</div>
<div class="row">
<label for="History_0_year">Year</label>
<select name="History[0][year]" id="History_0_year">
<option value="">Select</option>
</select>
</div>
</div>
<input id="addAnother" type="button" value="Add Another" />
Run Code Online (Sandbox Code Playgroud)
当克隆此DIV时,需要修改输入元素NAME和ID标记,以便我们可以识别服务器端脚本中的数据.
我有以下代码克隆DIV并修改INPUT和SELECT标记:
var counter = 0;
$('#addAnother').click(function(){
var divCloned = $('.history-form-fields:first').clone();
divCloned.insertAfter('.history-form-fields:last');
initNewInputs(divCloned.children('.row'), ++counter);
});
function initNewInputs(divs, idNumber)
{
var inputs = divs.children('input, select').get(); // find all the INPUT and SELECT tags
for(var i in inputs)
{
inputs[i].id …Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含数百行的数据网格,每行包含一个复选框,以便用户可以从网格中选择一个项目.
现在,用户可能花费大量时间过滤/搜索网格并勾选所需的复选框,只是意外地按下键盘上的退格键或单击页面上的超链接.他们会丢失所有的复选框选项.
因此,我想介绍一些功能,如果至少勾选了一个复选框,那么如果用户无意中执行了将其导航离开页面的操作,则会显示JavaScript确认消息以通知用户此操作.
复选框都属于同一组,例如它将被称为"产品".
这有可能吗?
我有一个自定义弹出功能。我想要的是浏览器后退按钮以关闭此弹出窗口。
我理想的情况是不要在网址栏中显示主题标签。
我试图把window.history.pushState('forward', null, '');我的showPopup()功能,然后执行以下操作:
$(window).on('popstate', function () {
closePopup();
});
Run Code Online (Sandbox Code Playgroud)
确实可以,但是问题是当我手动关闭弹出窗口时,必须按两次后退按钮才能导航回到上一页(显然是因为打开弹出窗口时添加了浏览器历史记录条目)。
最好的方法是什么?是否可以在不添加浏览器历史记录条目的情况下完成?本质上,我想做的是复制移动应用程序的行为。在移动应用中按返回按钮通常会关闭所有打开的模式或上下文菜单。
$(window).on('popstate', function () {
closePopup();
});
Run Code Online (Sandbox Code Playgroud)
$('.popup-link').click(function() {
showPopup();
});
$('.popup-close').click(function() {
hidePopup();
});
function showPopup() {
$('.popup').addClass('active');
}
function hidePopup() {
$('.popup').removeClass('active');
}Run Code Online (Sandbox Code Playgroud)
.popup {
background-color: #ccc;
width: 300px;
height: 300px;
display: none;
}
.popup.active {
display: block;
}Run Code Online (Sandbox Code Playgroud)
我有几个jQuery UI Dialogs处理程序,所有这些都包含以下内容:
open: function(event, ui) {
$(".ui-dialog-titlebar").removeClass("ui-corner-all");
$(".ui-dialog").removeClass("ui-corner-all");
},
Run Code Online (Sandbox Code Playgroud)
这样对话框就有方角,而不是圆角.我想知道是否可以将此设置为默认值,这样我就不必将此代码插入到页面上的每个对话框配置中.
我知道我可以编辑CSS,但如果不需要,实际删除该类会更有意义.
我在afterValidate()事件中使用 ActiveForm ,但是目前afterValidate()在任何验证事件上都会触发。我如何区分事件validateOnSubmit,validateOnBlur和validateOnChange?
基本上,我只希望我的afterValidate()函数在提交时被触发。这是我的代码:
PHP:
<?php $form = ActiveForm::begin([
'id' => 'register-form',
'options' => [
'class' => 'validate-form',
],
'enableClientValidation' => true,
'enableAjaxValidation' => false,
'validateOnSubmit' => true,
'validateOnBlur' => true,
'validateOnChange' => true,
]); ?>
Run Code Online (Sandbox Code Playgroud)
JS:
// JS afterValidate function
$('.validate-form').on('afterValidate', function (event, messages, errorAttributes) {
$('.error-popup').show();
return false;
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<div class="error-popup">Please review the errors in the form below.</div>
Run Code Online (Sandbox Code Playgroud)
正如您在我afterValidate()上面的函数中看到的那样,如果存在验证错误,则会显示一个错误弹出窗口。但是,如果用户提交表单时出现任何验证错误,我只希望此错误弹出窗口出现。
如果在模糊/更改时出现验证错误,则应该在没有任何错误弹出窗口的情况下进行正常的内联验证。
根据我的理解,beforeSubmit只有在验证通过时才会触发事件。