我在这里得到了很好的支持,所以我想我会再试一次,因为我不知道哪里可以开始寻找这个答案。
我有一个简单的MySQL数据库,名为“testimonials”,其中包含3个表,“id”,“name”,“content”
我想要做的是在固定大小的区块内显示推荐书。只是简单地显示内容完全没有问题,但是我被卡住的是(有点)独特的方式我试图让它工作。我想在每个页面加载时显示一个随机项目,然后检查推荐内“内容”的字符长度,如果它等于或大于XX长度,则只显示一个推荐,否则如果是长度小于XX以显示第二个推荐(假设它与第一个证明相结合不会破坏容器盒)。
有问题的盒子宽度为362像素,高度为353像素,使用14dx字体和Verdana。证词如何出现在页面上的示例如下:
“这是推荐内容,来自客户的一些好消息。”
- Billy Bob,所有者,Crazy Joe's Tavern
数据库中的“名称”表以粗体显示所有内容(当然是减去),以防有人觉得有必要提问。
正如我输入的那样,我觉得好像在寻求奇迹,但我仍然会发布这个问题,希望有人可能只知道答案。和往常一样,感谢我可能得到的任何帮助,如果这只是简单地要求太多,我并不完全反对一次只显示一个推荐书的想法,制定一个基本规则,说他们必须包含至少XX个字符
谢谢!
快速更新:我没想到得到这么快的答案,我现在不在我的办公桌前,所以一旦我坐下来,我就会看到哪个答案最合适。但是,你们聚在一起试图让你的答案比以前的答案更复杂吗?大声笑,谢谢,对于任何提供帮助的人,你们摇滚!
最终编辑:我决定反对这个想法,因为它只是复杂的一切。目前,我只是展示所有推荐,并让它们滚动,同时我在jQuery片段上工作以使其更漂亮。谢谢大家的帮助!如果我再次决定这样做,我会尝试我选择的答案。
答案 0 :(得分:0)
你只需要一个循环。伪代码:
$length = 0;
$target = 200; // or whatever
while( $length < $target ) {
$comment = getOneComment();
displayComment($comment);
$length += strlen( $comment['content'] ); // assuming getOneComment() returns an associative array
}
为了使它漂亮,如果显示框将是一个固定的高度,你可以使用一些jQuery来切换是否显示第二个评论。
答案 1 :(得分:0)
这就是你需要的东西。
<?php
$str = $res["testimonial"];
if (strlen($str) > 50) {
// Logic to retrieve and display second testimonial
}
?>
显然,你需要做更多的处理来确定第二个推荐书是否足够短以适应与否。但这应该让你开始。
编辑: 对于随机化,我在我自己的网站上使用它:
$referrals = mysql_query("SELECT id FROM ts_testimonials");
$referralView = array();
$i = 0;
while ($newReferral = mysql_fetch_array($referrals)) {
$referralView[$i] = $newReferral['id'];
$i++;
}
if (sizeof($referralView) >= 1){
$referralTop = rand(0,sizeof($referralView)-1);
$newReferralTop = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralTop]."'"));
if (sizeof($referralView) >=2){
$referralBottom = rand(0,sizeof($referralView)-1);
while ($referralBottom == $referralTop) {
$referralBottom = rand(0,sizeof($referralView)-1);
}
$newReferralBottom = mysql_fetch_array(mysql_query("SELECT * FROM ts_testimonials WHERE id = '".$referralView[$referralBottom]."'"));
}
}
答案 2 :(得分:0)
假设您在数组中有推荐信:
$testimonials = array(
't1' => array(
'content' => 'testimonials 1 content..',
'author' => 'the author'
),
't2' => array(
'content' => 'testimonials 2 content..',
'author' => 'the author 2'
),
);
您可以拥有maxLengthTestimonialsContent
和maxLenthAllTestimonnials
变量:
$maxLengthTestimonialsContent = 120;
$maxLenthAllTestimonnials = 240;
现在通过一个简单的循环,您可以构建用于显示的数组推荐:
$testimonialsToShow = array();
$i = 1; $totalLength = 0
foreach($testimonials as $t) {
if( $i > 1 && strlen( $t['content']) < $maxLengthTestimonialsContent
&& $totalLength < $maxLenthAllTestimonnials )
break; // basically here you test that testimonials less first
// and with less length than maxLengthTestimonial, and also
// total length less than maxLengthAll to be stored
//in $testimonialsToShow
else {
$testimonialsToShow[] = $t;
$totalLength = $t['content'];
}
}