Drupal:在外部php文件中插入fivestar小部件

时间:2010-09-26 03:23:41

标签: php drupal rating voting drupal-fivestar

我一直在尝试加载五星模块并在外部php文件中显示所选节点的评级小部件。我已经获得了页面上显示的评级小部件,但它只显示小部件的降级版本(非JavaScript,下拉小部件和“评级”按钮)我查看了页面的源代码但是没有加载用于fivestar模块的javascript 。我试图使用以下函数加载javascript但没有运气:

fivestar_add_js(); $ path = drupal_get_path('module','fivestar'); drupal_add_js($ path。'/ js / fivestar.js','inline','footer');

以下是php文件中的代码:

    //require the bootstrap include
    require_once 'includes/bootstrap.inc';

    //Load Drupal
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

    fivestar_add_css();

    // I have used one of the following two functions one at a time to test.
    fivestar_add_js();
    $path = drupal_get_path('module','fivestar');
    drupal_add_js($path.'/js/fivestar.js', 'inline', 'footer');

    $book = $_GET["book"];
    $chap = $_GET["chap"];
    $prob = $_GET["prob"];

    $string = $book.'/'.$chap.'/'.$prob;
    $query = "SELECT ctcr.nid FROM content_type_comments_ratings AS ctcr WHERE ctcr.field_problem_value = '".$string."'";
    $result=db_query($query);
    $row = db_fetch_array($result);
    if(isset($row['nid']))
    {
        $nid = $row['nid'];
        node_load(FALSE, NULL, TRUE);
        $fivestar = node_load($nid, NULL, TRUE);

        if (function_exists('fivestar_widget_form')) print fivestar_widget_form($fivestar);
    }

如果你能给我一个提示或指导我在网上阅读,我将不胜感激。非常感谢你提前。

1 个答案:

答案 0 :(得分:3)

通过在“外部”页面/文件上执行所有操作,您绕过了Drupal主题系统 - drupal_add_js()(和fivestar_add_js(),因为它最终只是使用它)不输出脚本标记本身,但只是确保它们将包含在$scripts中的page.tpl.php变量中,然后负责打印变量内容。由于您没有浏览页面模板,因此没有脚本标记。

您可以在外部文件中执行print drupal_get_js();以输出通过drupal_add_js()添加的脚本作为快速修复,但请注意,这将输出所有默认的drupal js文件,这可能是超过你需要的(但也可能包含fivestar所需的其他脚本,例如jquery)。或者,您必须自己创建所需的脚本标记。

至于要阅读的内容的提示,很难指出某些特定内容,但您可能想要阅读the theming system一般。