0

在 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");
});

这样当鼠标移过它的一部分时,每个“块”都会突出显示。
我只是通过反复试验得到了最终的解决方案,所以可能有更好的方法。
但它有效!

4

3 回答 3

1

不要在您的 SQL 查询中进行格式化(没有换行符或连接)。选择各个属性,然后构建您的表格。每个描述、价格、数量设置的一行。

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)){

 //build date, number, customer, name and the first
 //job description, price and qty
 BuildRow($row[$quotedate], $row[$quoteno], $row[$customer], $row[$contactname], 
           $row[$jobdescription1], "£" . $row[$priceeach1], $row[$quantity1]);
 //now build a row/cells for each of the
 //additional description, price, qty in the result row.
 BuildRow("", "", "", "", $row[$jobdescription2], $row[$priceeach2], $row[$quantity2]);
 //etc...
}

function BuildRow($date, $num, $cust, $name, $descrip, $price, $qty){
 //don't build if empty
 if($date || $num || $cust || $name || $descrip || $price || $qty) {
   echo "<tr >";
   echo "<td>$date</td>";
   //etc...
   echo "</tr>";
 }
}

通过一些样式,您应该能够让它看起来像每个引用的“块”。

于 2013-02-02T20:59:39.313 回答
0

获得相同高度的描述和数量行的最简单方法是使用这样的嵌套表:

<style>
    table {border-collapse: collapse; border-spacing: 0;}
    td {vertical-align: top; margin: 0; }
    .outertable td {border: 1px solid black; }
    .inner {border-right: 1px solid black; }
    .innertable td {width: 100px; border-top-style: none; border-bottom-style: none;}
    .innertable td.desc {border-left-style: none;}
    .quantity {border-right-style: none;}
</style>
<table class="outertable">
    <tr>
        <td>02-02-2013</td>
        <td>102</td>
        <td>test</td>
        <td>test</td>
        <td colspan="3" class="holder">
            <table class="innertable">
                <tr>
                    <td class="desc">testtesttest testtesttesttestt esttesttest</td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
                <tr>
                    <td class="desc">testtesttest </td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
                <tr>
                    <td class="desc">testtesttest esttesttest</td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>02-02-2013</td>
        <td>102</td>
        <td>test</td>
        <td>test</td>
        <td colspan="3" class="holder">
            <table class="innertable">
                <tr>
                    <td class="desc">testtesttest testtesttesttestt esttesttest</td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
                <tr>
                    <td class="desc">testtesttest </td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
                <tr>
                    <td class="desc">testtesttest esttesttest</td>
                    <td class="price">$1</td>
                    <td class="quantity">1</td>
                </tr>
            </table>
        </td>
    </tr>
</table>

有关工作示例,请参阅http://jsfiddle.net/4tJyq/ 。

于 2013-02-02T21:06:07.437 回答
0

在职位描述中使用可折叠样式怎么样?例如,您可以显示前 50 个字符,并允许最终用户单击以查看全文。

看看这个参考:http: //twitter.github.com/bootstrap/javascript.html#collapse

干杯。

于 2013-02-03T03:39:24.477 回答