在 PHP 选择中,有一个表,其中包含每行中的项目列表。
测试我目前拥有的图像。
正如工作描述所见,每个价格和数量列都有不同的项目,每个项目之间都有一个换行符。我现在发现的问题是,如果工作描述太长,它会进入下一行,与价格和数量列一致。
我尝试了许多嵌套表,但最终都变得混乱并破坏了我目前拥有的奇偶 CSS。所以我一直回到下面的代码。
我的选择:
"SELECT DATE_FORMAT(`$quotedate`, '%d-%m-%Y') AS `$quotedate`, `$quoteno`,
`$customer`, `$contactname`, CONCAT_WS('\r\r', `$jobdescription1`,
`$jobdescription2`, `$jobdescription3`, `$jobdescription4`, `$jobdescription5`,
`$jobdescription6`, `$jobdescription7`, `$jobdescription8`, `$jobdescription9`,
`$jobdescription10`) AS `Job Description`,
CONCAT_WS('\r\r £', concat('£', `$priceeach1`), `$priceeach2`, `$priceeach3`,
`$priceeach4`, `$priceeach5`, `$priceeach6`, `$priceeach7`, `$priceeach8`,
`$priceeach9`, `$priceeach10`) AS `Price Each`,
CONCAT_WS('\r\r', `$quantity1`, `$quantity2`, `$quantity3`, `$quantity4`,
`$quantity5`, `$quantity6`, `$quantity7`, `$quantity8`, `$quantity9`, `$quantity10`)
AS`Quantity`
FROM {$table}
WHERE `$status`=0 $search ORDER BY {$table}.`$quotedate` asc";
和表:
echo "<table id=\"quote_table\"><tr>";
for($i=0; $i<$fields_num; $i++){
$field = mysql_fetch_field($result);
echo "<th>{$field->name}</th>";
}
echo "</tr>";
while($row = mysql_fetch_row($result)){
echo "<tr id=\"data\">";
foreach($row as $cell)
echo nl2br ("<td>$cell</td>");
echo "</tr>";
}
有谁知道我该如何解决这个问题。谢谢
解决方案
我使用了 bmewsing 答案的略微修改版本。
所以我使用了没有格式的选择。然后把它放在一个表中,如下所示:
while($row = mysql_fetch_array($result))
{
BuildRow($row[$quotedate], $row[$quoteno], $row[$customer], $row[$contactname],
$row[$jobdescription1], "£" . $row[$priceeach1], $row[$quantity1]);
if($row[$jobdescription2]){ BuildRow2("", "", "", "", $row[$jobdescription2], "£" . $row[$priceeach2], $row[$quantity2]);}
if($row[$jobdescription3]){ BuildRow2("", "", "", "", $row[$jobdescription3], "£" . $row[$priceeach3], $row[$quantity3]);}
if($row[$jobdescription4]){ BuildRow2("", "", "", "", $row[$jobdescription4], "£" . $row[$priceeach4], $row[$quantity4]);}
if($row[$jobdescription5]){ BuildRow2("", "", "", "", $row[$jobdescription5], "£" . $row[$priceeach5], $row[$quantity5]);}
if($row[$jobdescription6]){ BuildRow2("", "", "", "", $row[$jobdescription6], "£" . $row[$priceeach6], $row[$quantity6]);}
if($row[$jobdescription7]){ BuildRow2("", "", "", "", $row[$jobdescription7], "£" . $row[$priceeach7], $row[$quantity7]);}
if($row[$jobdescription8]){ BuildRow2("", "", "", "", $row[$jobdescription8], "£" . $row[$priceeach8], $row[$quantity8]);}
if($row[$jobdescription9]){ BuildRow2("", "", "", "", $row[$jobdescription9], "£" . $row[$priceeach9], $row[$quantity9]);}
if($row[$jobdescription10]){ BuildRow2("", "", "", "", $row[$jobdescription10], "£" . $row[$priceeach10], $row[$quantity10]);}
}
function BuildRow($qdate, $qno, $cust, $cname, $jobdesc, $priceea, $qty){
if($qdate || $qno || $cust || $cname || $jobdesc || $priceea || $qty) {
echo "<tr class=\"top\">";
echo "<td>$qdate</td>";
echo "<td>$qno</td>";
echo "<td>$cust</td>";
echo "<td>$cname</td>";
echo "<td>$jobdesc</td>";
echo "<td>$priceea</td>";
echo "<td>$qty</td>";
echo "<tr/>";
}
}
function BuildRow2($qdate2, $qno2, $cust2, $cname2, $jobdesc2, $priceea2, $qty2){
if($qdate2 || $qno2 || $cust2 || $cname2 || $jobdesc2 || $priceea2 || $qty2) {
echo "<tr class=\"middle\">";
echo "<td>$qdate2</td>";
echo "<td>$qno2</td>";
echo "<td>$cust2</td>";
echo "<td>$cname2</td>";
echo "<td>$jobdesc2</td>";
echo "<td>$priceea2</td>";
echo "<td>$qty2</td>";
echo "<tr/>";
}
}
然后使用 jQuery 将“奇数”或“偶数”类添加到中间类,具体取决于前一个“顶级”类具有的类。
$(document).ready(function(){
$("#quote_table > tbody > tr.top:even").addClass("even");
$("#quote_table > tbody > tr.top:odd").addClass("odd");
$('.middle').each(function(){
var quote_class = $(this).prevUntil(".top").prev(".top").attr("class");
$(this).addClass(quote_class);
$(this).removeClass("top");
});
然后我放了:
$('tr.middle').hover(function(){
$(this).prevUntil(".top").nextUntil(".top").andSelf().prev().addClass("hover");},
function(){
$(this).prevUntil(".top").nextUntil(".top").andSelf().prev().removeClass("hover");
});
$('tr.top').hover(function(){
$(this).nextUntil(".top").andSelf().not('#add').addClass("hover");},
function(){
$(this).nextUntil(".top").andSelf().removeClass("hover");
});
这样当鼠标移过它的一部分时,每个“块”都会突出显示。
我只是通过反复试验得到了最终的解决方案,所以可能有更好的方法。
但它有效!