页面选择器(块开发)

时间:2015-04-15 10:34:43

标签: concrete5

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

我看了核心文件,回调的选项不再存在了。我已经使用js方法来创建页面选择器。

<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>

2 个答案:

答案 0 :(得分:4)

在版本7中,concrete5添加了称为&#34; events&#34;的东西。通过打开开发人员控制台并运行Concrete.event.debug(true),您可以看到在选择页面时触发的所有事件。找到要使用的事件后,可以使用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);
        }
    });

});

答案 1 :(得分:-1)

我确认回调的选项已经消失,这是一个令人沮丧的坦率但你可以轻松地自己做,我想用一点点javascript。

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

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