页面选择器(块开发)

Page selector (block development)

在 Concrete 5.6 中,可以创建 JavaScript 回调。我想知道如何在 5.7 中实现这一点。我想 select 一个页面,然后执行 ajax 调用以从该页面获取区域名称。

我查看了所有核心文件,回调选项已不存在。我已经使用js方法创建了页面selector。

<div data-field="entry-link-page-selector" class="form-group">
   <label><?php echo t('Choose Page:') ?></label>
    <div data-field="entry-link-page-selector-select"></div>
</div>

<script>

$('div[data-field=entry-link-page-selector-select]').concretePageSelector({
    'inputName': 'cTargetID'
});

老办法

<?php echo $page_selector->selectPage('cTargetID', $cTargetID, 'pageChange'); ?>

-- 更新--
在 add.php 和 edit.php 中,我包含了 form.php。在此文件中,我使用 page_selector 和 js 绑定到事件。由于某种原因,该事件仍未触发警报。我使用了下面答案中给出的示例。

<?php
defined('C5_EXECUTE') or die (_("Acccess Denied"));

$al = Core::make('helper/concrete/asset_library');
$colorPicker = Core::make('helper/form/color');
$pageSelect= Core::make('helper/form/page_selector');
?>

<style>
    .ccm-hide{display:none;}
</style>

<div class="subbscribe-form">

    <div class="form-group">
        <?php echo $pageSelect->selectPage('displayPagesCID', $displayPagesCID); ?>
    </div>

</div>


<script>
    Concrete.event.bind('SitemapSelectPage', function(e, data) {
        alert('You selected "' + data.title + '", it\'s cID is ' + data.cID);
    });
</script>

我确认回调选项已经消失,坦率地说这很糟糕,但你可以轻松地自己做,我认为只需一点 javascript。

<?php echo $page_selector->selectPage('cTargetID', $cTargetID); ?>
<script>
$('input[name=cTargetID]').on('change', function() {
    // Do something here
});
</script>

编辑:这不起作用,因为整个选择器被删除并通过 js 重新添加,因此永远不会触发更改事件。 不幸的是,我找不到替代解决方案

在版本 7 中,concrete5 添加了名为 "events" 的内容。您可以通过打开开发人员控制台和 运行 Concrete.event.debug(true) 查看 select 页面时触发的所有事件。找到要使用的事件后,您可以使用 Concrete.event.bind 挂钩它,例如:

Concrete.event.bind('SomeEvent', function(e, data) {
    // Do Stuff.
});

您要挂钩的事件是 SitemapSelectPage,它提供 cIDtitle 和站点地图实例。

编辑: 由于当前的核心错误,SitemapSelectPage 事件绑定在对话框打开之前被清除,为了解决这个问题,我们只需绑定到 ConcreteSitemap 事件并在那里绑定。

这是一个工作示例:

Concrete.event.bind('ConcreteSitemap', function(e, instance) {

    Concrete.event.bind('SitemapSelectPage', function(e, data) {
        if (data.instance == instance) {
            Concrete.event.unbind(e);

            alert("You've selected a page! " + data.cID);
        }
    });

});