【发布时间】:2012-12-25 14:44:11
【问题描述】:
我有一个将值存储到变量中的解析器(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() 函数与我的选择代码结合起来?
【问题讨论】:
-
您是否尝试过将 $item 传递给 printTerms 然后 if($term->name == $item[2]) { $selected='selected' }?
-
对了,忘了把$item传给函数。也就是说,你的建议不起作用。我需要说明 if($item[2] == 'facebook' && $term->slug == 'facebook') {$selected='selected';} 因为 $item[2] 和 $term->slug don并不总是匹配。我已经尽我所能尝试了您的解决方案,但没有成功。
-
如果您正在执行递归并且想要间隔或以其他方式复合一个值,您可以传递初始值和当前值,因此您在递归遍历中没有
for。您可能需要trim(strtolower($item[0])) == trim($term-slug))来均衡检查并删除任何看不见的空白。将选择的精确空格和所有输出作为代码块粘贴到答案中可能会有所帮助。 -
你是对的,如果我试图选择一个子选项,我需要修剪空白。但是,即使对于没有空格的父选项,该代码也不起作用。就我而言,$item[2] 或 $term->slug 中没有任何空格。
标签: php html mysql forms select