1

我有几个对函数的调用,这些getContent()函数的参数使用func_get_args(). 有几个参数保持不变,我想将它们设置为一个变量,以防止在所有这些函数调用中重复重复的参数。

以下是带有完整参数的函数调用示例:

<? getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:pastors-team",
    "order:series",
    "find_parent_category:team",
    "show:<div class='box box_stories'>",
    "show:<div class='box_pad box_img bwWrapper'>",
    "show:<div class='box_inner_pad'>",
    "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
    "show:<p class='teamsummary'>__summary__</p>",
    "show:<p class='phone_icon'>__authorXworkphone__</p>",
    "show:</div>",
    "show:</div>",
    "show:</div>"
); 
?>

理想情况下,我可以做这样的事情:

<? $myStyle = 
    "show:<div class='box box_stories'>",
    "show:<div class='box_pad box_img bwWrapper'>",
    "show:<div class='box_inner_pad'>",
    "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
    "show:<p class='teamsummary'>__summary__</p>",
    "show:<p class='phone_icon'>__authorXworkphone__</p>",
    "show:</div>",
    "show:</div>",
    "show:</div>";

getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:leadership-team",
    "order:series",
    "find_parent_category:team",
    $myStyle
);

getContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:executive-team",
    "order:series",
    "find_parent_category:team",
    $myStyle
); ?>

这可能吗?解决这个问题的最佳方法是什么?

注意:我不能更改 getContent() 函数,它是 CMS 的核心函数

4

4 回答 4

1

不幸的是,这是不可能的。您现在拥有的是传递article,display等和$myStyle(应该是一个数组)。你会得到错误,因为你没有传递足够的参数。

如果可以,请检查并查看是否getContent()有默认参数。

于 2012-08-02T19:10:36.887 回答
1

这是我能想到的最简单的一个:

call_user_func_array('getContent',array_merge(array(
    "article",
    "display:list",
    "find_series:team",
    "find_category:executive-team",
    "order:series",
    "find_parent_category:team",
    ),$myStyle)
);

编辑:Yazmat 的解决方案可能会更好。
您可以将它与可变数量的参数一起使用,如下所示:

<?php
function myGetContent() {
    $defaults = array(
        "show:<div class='box box_stories'>",
        "show:<div class='box_pad box_img bwWrapper'>",
        "show:<div class='box_inner_pad'>",
        "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
        "show:<p class='teamsummary'>__summary__</p>",
        "show:<p class='phone_icon'>__authorXworkphone__</p>",
        "show:</div>",
        "show:</div>",
        "show:</div>"
    );
    return call_user_func_array('getContent',array_merge(func_get_args(), $defaults));
}
于 2012-08-02T19:11:16.830 回答
1

您可以创建自己的函数,该函数只接受您需要的参数,并使用这些参数加上默认值调用 getContent() 函数。并使用这个新函数而不是 getContent()

编辑 :

你做这样的事情:

<?php
function myGetContent($param1,$param2,$param3,$param4,$param5,$param6){
  return getContent(
    $param1,
    $param2,
    $param3,
    $param4,
    $param5,
    $param6,
    "show:<div class='box box_stories'>",
    "show:<div class='box_pad box_img bwWrapper'>",
    "show:<div class='box_inner_pad'>",
    "show:<h3><a href='/staff-detail/__slug__'>__authorX__</a></h3>",
    "show:<p class='teamsummary'>__summary__</p>",
    "show:<p class='phone_icon'>__authorXworkphone__</p>",
    "show:</div>",
    "show:</div>",
    "show:</div>"
  );
}

然后你打电话:

myGetContent(
    "article",
    "display:list",
    "find_series:team",
    "find_category:leadership-team",
    "order:series",
    "find_parent_category:team"
);
于 2012-08-02T19:12:53.813 回答
0

你需要这个?

<?php

getContent(
    array(
        'type'                  => 'article',
        'display'               => 'list',
        'find_series'           => 'team',
        'find_category'         => 'leadership-team',
        'order'                 => 'series',
        'find_parent_category'  => 'team'
    ),
    array(
        '<div class="box box_stories">',
        '<div class="box_pad box_img bwWrapper">',
        '<div class="box_inner_pad">',
        '<h3><a href="/staff-detail/__slug__">__authorX__</a></h3>',
        '<p class="teamsummary">__summary__</p>',
        '<p class="phone_icon">__authorXworkphone__</p>',
        '</div>',
        '</div>',
        '</div>'
    )
);


function getContent($argv, $shows){
    echo '<p>'.$argv['type'].'</p>';
    echo '<p>'.$argv['list'].'</p>';
    /* ... etc ... */

    echo '<pre>'.htmlspecialchars(print_r($argv, true), ENT_QUOTES).'</pre>';
    echo '<pre>'.htmlspecialchars(print_r($shows, true), ENT_QUOTES).'</pre>';
}
于 2012-08-02T19:34:14.577 回答