在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>
答案 0 :(得分:4)
在版本7中,concrete5添加了称为&#34; events&#34;的东西。通过打开开发人员控制台并运行Concrete.event.debug(true)
,您可以看到在选择页面时触发的所有事件。找到要使用的事件后,可以使用Concrete.event.bind
来挂钩,例如:
Concrete.event.bind('SomeEvent', function(e, data) {
// Do Stuff.
});
您想要加入的事件是SitemapSelectPage
,它会为cID
,title
和站点地图实例提供补充。
编辑:由于当前的核心错误,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重新添加,因此永远不会触发更改事件。 不幸的是,我无法找到替代解决方案