我有一个将值存储到变量中的解析器(duh)。这里有问题的变量是:
$item[2] <- contains the string 'facebook'
我有一个包含选择菜单的 html 表单。菜单是根据我的数据库中存储的内容动态填充的。这就是我的菜单的构建方式:
<?php
$formats = $wpdb->get_results($wpdb->prepare("
SELECT * FROM table
WHERE taxonomy = 'format'
"));
?>
<div id="format" class="form">
Format: <?php echo $item[2]; ?> <!-- echoes the variable to know it works -->
<?php
$terms = array();
foreach($formats as $key => $term){
$terms[$term->parent][$term->term_id] = $term;
}
?>
<select name="formats">
<option value="empty"></option>
<?php printTerms($terms, $item); ?> <!--- THIS DOESN'T APPEAR TO PASS $item INTO THE FUNCTION -->
</select>
</div>
<?php
function printTerms($terms, $item, $parent = 0, $deep = 0){ // HOW DO I USE $item ???
if(count($terms[$parent]) > 0){
$indent = "";
for($i = 0; $i < $deep; $i++){
$indent .= " ";
}
foreach($terms[$parent] as $key => $term){
if(count($terms[$term->term_id]) > 0){
if($deep == 0){
echo "<option class='toplevel' value='".$term->name."' ".$selected.">".$term->name."</option>"; // <- Outputs top level parents
} else {
echo "<option class='child".$deep."' value='".$term->name."' ".$selected.">".$indent.$term->name."</option>"; // <- Outputs children that are also parents
}
printTerms($terms, $term->term_id, ($deep+1));
} else {
echo "<option class='solo' value='".$term->name."' ".$selected.">".$indent.$term->name."</option>"; // <- outputs bottom level children and solos.
}
}
}
}
?>
到目前为止,这一切都有效,但这是我的问题。
我想这样做,如果 items[2] 包含字符串“Facebook”(它确实如此),则默认选择相应的菜单选项。
我确实让它在一个简单的静态选择菜单中工作,如下所示:
foreach ($formats as $format) {
$selected = '';
if ($item[2] == 'facebook' || $item[2] == 'wall' && $format->slug == 'facebook'){
$selected = 'selected';
}
echo "<option value='".$format->name."' ".$selected.">".$format->name."</option>";
}
$format->slug 包含我想要匹配到 $item[2] 的值。因此,$term->slug 对应于 $format->slug。
$format->name 是输出到菜单本身的选择选项的标题。同样,$term->name 对应于 $format->name。
$formats 访问这个 MySQL 表:
term_id name slug taxonomy parent
1 Entry Form entry-form format 0
2 Page page format 3
3 Facebook facebook format 0
4 Entry Form facebook-entry-form format 3
5 Twitter twitter format 0
6 Single single format 2
您会注意到我已经将 $selected 变量插入到我的函数中。我的问题是我无法让上面的代码在 printTerms 函数的上下文中工作。
就我的问题而言,假设任何变量中都没有空格(我检查过)。
要记住的一些规则:
$term->slug 和 $item[2] 并不总是匹配。如果 $item[2] 是 'wall',这也会导致默认选择 'facebook'。(见我上面的代码)。
所以问题是,我如何将我的 printTerms() 函数与我的选择代码结合起来?