我在新页面的作曲家表单上遇到了Concrete5的内置'用户'属性的问题。单击“选择用户”时,页面将导航到http://website.com/ccm/system/dialogs/user/search
。但那页完全是空白的。
当您进入属性选项卡并单击“作者”下的“选择用户”时,它还具有URL http://website.com/ccm/system/dialogs/user/search
,但它不会重新打开页面,而是在当前页面内启动用户选择器。我相信,这是使用以下JavaScript完成的:
$(function() {
$("#ccm-user-selector-uID").dialog();
$("#ccm-user-selector-uID").on('click', function() {
var selector = $(this);
ConcreteEvent.unsubscribe('UserSearchDialogSelectUser.core');
ConcreteEvent.subscribe('UserSearchDialogSelectUser.core', function(e, data) {
var par = selector.parent().find('.ccm-summary-selected-item-label'),
pari = selector.parent().find('[name=uID]');
par.html(data.uName);
pari.val(data.uID);
e.stopPropagation();
jQuery.fn.dialog.closeTop();
});
ConcreteEvent.subscribe('UserSearchDialogAfterSelectUser', function(e) {
jQuery.fn.dialog.closeTop();
});
});
});
Composer中的“用户”选项与其关联的JavaScript非常相似,仅替换选择器。
$(function() {
$("#ccm-user-selector-ptComposer[13][user]").dialog();
$("#ccm-user-selector-ptComposer[13][user]").on('click', function() {
var selector = $(this);
ConcreteEvent.unsubscribe('UserSearchDialogSelectUser.core');
ConcreteEvent.subscribe('UserSearchDialogSelectUser.core', function(e, data) {
var par = selector.parent().find('.ccm-summary-selected-item-label'),
pari = selector.parent().find('[name=ptComposer[13][user]]');
par.html(data.uName);
pari.val(data.uID);
e.stopPropagation();
jQuery.fn.dialog.closeTop();
});
ConcreteEvent.subscribe('UserSearchDialogAfterSelectUser', function(e) {
jQuery.fn.dialog.closeTop();
});
});
});
我无法找到任何能够保持功能形式在Composer部分按预期工作的内容,就像在创建新页面时在“属性”部分中所做的那样。
是否有其他人遇到过此问题或对可能出现的问题有什么想法?
答案 0 :(得分:0)
原来这个问题与以下两行有关:
$("#ccm-user-selector-ptComposer[13][user]").dialog();
$("#ccm-user-selector-ptComposer[13][user]").on('click', function() {
它们不是有效的ID,因此jQuery无法找到它们。解决问题的一个hacky解决方案是用{/ 1}替换concrete/src/Form/Service/Widget/UserSelector.php
中的第38和39行
$("[id='ccm-user-selector-{$fieldName}']).dialog();
$("[id='ccm-user-selector-{$fieldName}']).on('click', function() {
允许它搜索具有与该字符串匹配的ID的任何元素。