在Concrete5.7 Composer中选择User Broken

时间:2015-02-13 16:12:34

标签: concrete5

我在新页面的作曲家表单上遇到了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部分按预期工作的内容,就像在创建新页面时在“属性”部分中所做的那样。

是否有其他人遇到过此问题或对可能出现的问题有什么想法?

1 个答案:

答案 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的任何元素。