页面选择器(块开发)
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
,它提供 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);
}
});
});
在 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
,它提供 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);
}
});
});