对不起,如果之前有人问过,我环顾四周,但在StackOverFlow.com上找不到这个具体问题。
我有一个名为'view-post-wall'的视图,我试图通过ajax提交添加提交给此视图的帖子,称为'post',但我还没有开始添加ajax。
我的模块名称是'friendicate'
我不明白我在这里缺少什么,我正在学习一个教程,现在已经无法解决这个问题2天了。
我也没有任何错误。
这是完整的模块代码
function _form_post_ajax_add() { $form = array(); $form['title'] = array( '#type' => 'textfield', '#title' => 'Title of post', ); $form['body'] = array( '#type' => 'textarea', '#title' => 'description', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Submit post', ); return $form; } function post_ajax_preprocess_page(&$variables) { //krumo($variables); $arg = arg(); if($arg[0] == 'view-post-wall') { $variables['page']['content']['system_main']['main']['#markup'] = drupal_render(drupal_get_form('_form_post_ajax_add')); } }
答案 0 :(得分:1)
有多种方法可以实现这一点,我将在下面概述这些方法。此外,如果下面的建议没有任何效果,则可能是您的表单函数名称无效。我不确定是否会抛出Drupal。函数名的正确格式应以_form结尾,并包含参数$ form和$ form_state,如下所示:
_form_post_ajax_add_form($form, &$form_state) { ... }
另外,如果你想使用一个钩子,Steff在你的问题的评论中提到你需要在函数名中使用你的模块名。
friendicate_preprocess_page(&$variables) { ... }
好的,现在有一些想法如何在页面上获取表单。
您可以在模块中创建自定义块,然后将其分配到admin / structure / blocks中的区域
<?php
/**
* Implements hook_block_info().
*/
function friendicate_block_info() {
$blocks = array();
$blocks['post_ajax'] = array(
'info' => t('Translation Set Links'),
'cache' => DRUPAL_NO_CACHE,
);
return $blocks;
}
/**
* Implements hook_block_view().
*/
function friendicate_block_view($delta = '') {
$block = array();
if ($delta == 'post_ajax') {
$form = drupal_get_form('_form_post_ajax_add_form');
$block['content'] = $form;
}
return $block;
}
清除缓存,您的块应显示在admin / structure / blocks
中您可以使用Views hook hook_views_pre_render()
在视图之前和之后添加标记<?php
/**
* Implements hook_view_pre_render().
*/
function frendicate_views_pre_render(&$view) {
if($view->name == 'view_post_wall') { // the machine name of your view
$form = drupal_get_form('_form_post_ajax_add_form');
$view->attachment_before = render($form);
}
}
答案 1 :(得分:0)
或者可以使用view post render
[9, 8, 7] => {0: 9, 1: 8, 2: 7}