Дължина на заглавиете при извеждане на теми от phpbb

MrBlack

Registered
Здравейте пак...Пиша ви пак,ако може да ми помогнете.Става дума за същия код за извеждане на темите от phpbb към сайт,но сега искам,ако е възможно да се зададе максимум на буквите,които се изкарват от заглавията.Тоест ако едно заглавие е "1234567890АБВГ",то като го изкара в индекс-а да бъде нещо такова "12345678...".Намерих един друг код и от там извадих точно това,но явно не успях да го сложа,както трябва,затова ще помоля да ми помогнете.Надявам се да сте ме разбрали,за какво става въпрос !

Ето го и кода -
Код:
<center>
<?php
include "forum/config.php";
//Брой на последните теми, които искате да се показват
$latest = "6";

$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
if (!$link)
{
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected)
{
die ('Can\'t use foo : ' . mysql_error());
}
mysql_query("SET NAMES cp1251");
$get_url = "SELECT config_name, config_value FROM $table_prefix".config." WHERE config_name = 'server_name' LIMIT 0,1";
$url = mysql_query($get_url);
$url = mysql_fetch_array($url);
$latest_topics = "SELECT * FROM $table_prefix".topics." WHERE topic_approved = '1' ORDER BY topic_time DESC LIMIT 0,$latest";
$topics = mysql_query($latest_topics);



echo "

<table style='width: 620px; color: #FFFFFF; font-size:14px;'>

<tr style='background:#; height:30px; align:center;'><td style='border: 1px solid #FFFFFF;'>Тема</td><td style='border: 1px solid #FFFFFF;'>Автор</td><td style='border: 1px solid #FFF;'>Отговори</td><td style='border: 1px solid #FFF;'>Преглеждания</td></tr>

";
while($row = mysql_fetch_array($topics))
{
extract($row);
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{

$topics_p = mysql_query("SELECT * FROM $table_prefix".users." WHERE `user_id`='$topic_poster'");
$row2 = mysql_fetch_array($topics_p);
$poster = $row2['username'];

$forums = mysql_query("SELECT * FROM $table_prefix".forums." WHERE `forum_id`='$forum_id'");
$row3 = mysql_fetch_array($forums);
$forum5 = $row3['forum_name'];




echo "




<tr style='height:45px'>
<td style='background:#; border: 1px solid #FFF; width:350px; text-align:left;'><div style='padding: 0px 0 0 10px;' class='last_news'>

<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id."' target='_blank' class='last_news'><font color='#38719c'>".$topic_title."</font></a>
<br>
<font size='2px'>(<a href='".$phpbb_root_path."viewforum.php?f=".$forum_id."' target='_blank' class='last_news'>".$forum5."</a>)</font>
</div></td>
<td style='border: 1px solid #FFF;'><div style='padding: 0px 0 0 10px;' class='last_news'><a href='".$phpbb_root_path."memberlist.php?mode=viewprofile&u=".$topic_poster."' target='_blank' class='last_news'>".$poster."</a></div></td>
<td style='colour: #000; border: 1px solid #FFF;'>".$topic_replies."</td>
<td style='border: 1px solid #FFF;'>".$topic_views."</td>
</tr>





";
}
}

echo "</table>";
?></center>
 
Погледни този урок:
http://mytech.bg/uroci/5/PHP/4/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F+%D0%B7%D0%B0+%D1%81%D1%8A%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BD%D0%B0+%D1%82%D0%B5%D0%BA%D1%81%D1%82
 
<center>
<?php
include "forum/config.php";
//Брой на последните теми, които искате да се показват
$latest = "6";


$simvoli = 8; // до кой символ да изкарва заглавието


$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
if (!$link)
{
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected)
{
die ('Can\'t use foo : ' . mysql_error());
}
mysql_query("SET NAMES cp1251");
$get_url = "SELECT config_name, config_value FROM $table_prefix".config." WHERE config_name = 'server_name' LIMIT 0,1";
$url = mysql_query($get_url);
$url = mysql_fetch_array($url);
$latest_topics = "SELECT * FROM $table_prefix".topics." WHERE topic_approved = '1' ORDER BY topic_time DESC LIMIT 0,$latest";
$topics = mysql_query($latest_topics);

echo "

<table style='width: 620px; color: #FFFFFF; font-size:14px;'>

<tr style='background:#; height:30px; align:center;'><td style='border: 1px solid #FFFFFF;'>Тема</td><td style='border: 1px solid #FFFFFF;'>Автор</td><td style='border: 1px solid #FFF;'>Отговори</td><td style='border: 1px solid #FFF;'>Преглеждания</td></tr>

";
while($row = mysql_fetch_array($topics))
{
extract($row);
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{

$topics_p = mysql_query("SELECT * FROM $table_prefix".users." WHERE `user_id`='$topic_poster'");
$row2 = mysql_fetch_array($topics_p);
$poster = $row2['username'];

$forums = mysql_query("SELECT * FROM $table_prefix".forums." WHERE `forum_id`='$forum_id'");
$row3 = mysql_fetch_array($forums);
$forum5 = $row3['forum_name'];


$topic_title = substr($topic_title,0,$simvoli);
if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}
else
{
$ntopic = $topic_title;
}


echo "
<tr style='height:45px'>
<td style='background:#; border: 1px solid #FFF; width:350px; text-align:left;'><div style='padding: 0px 0 0 10px;' class='last_news'>

<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id."' target='_blank' class='last_news'><font color='#38719c'>".$ntopic."</font></a>
<br>
<font size='2px'>(<a href='".$phpbb_root_path."viewforum.php?f=".$forum_id."' target='_blank' class='last_news'>".$forum5."</a>)</font>
</div></td>
<td style='border: 1px solid #FFF;'><div style='padding: 0px 0 0 10px;' class='last_news'><a href='".$phpbb_root_path."memberlist.php?mode=viewprofile&u=".$topic_poster."' target='_blank' class='last_news'>".$poster."</a></div></td>
<td style='colour: #000; border: 1px solid #FFF;'>".$topic_replies."</td>
<td style='border: 1px solid #FFF;'>".$topic_views."</td>
</tr>





";
}
}

echo "</table>";
?></center>

Кода в червено са ти символите, а кода в зелено ти ги ограничава и ако са над позволените добавя ... ;)
 
Много добре,като цяло работи,но има малък проблем не се показват точките?



Снимка: -->


 
Замести това зеленото, направо с
PHP:
$ntopic = ( strlen($topic_title) > $simvoli ? substr($topic_title,0,$simvoli).'...' : $topic_title );
 
На мястото на това -->
Код:
$topic_title = substr($topic_title,0,$simvoli);
if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}
else
{
$ntopic = $topic_title;
}


сложих това -->

Код:
$ntopic = ( strlen($topic_title) > $simvoli ? substr($topic_title,0,$simvoli).'...' : $topic_title );


..и сега въобще не работи?!


Някой ще може ли да помогне?!
 
Така ...

PHP:
<center>
<?php
include "forum/config.php";
//Брой на последните теми, които искате да се показват
$latest = "6";


$simvoli = 8; // до кой символ да изкарва заглавието


$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
if (!$link)
{
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected)
{
die ('Can\'t use foo : ' . mysql_error());
}
mysql_query("SET NAMES cp1251");
$get_url = "SELECT config_name, config_value FROM $table_prefix".config." WHERE config_name = 'server_name' LIMIT 0,1";
$url = mysql_query($get_url);
$url = mysql_fetch_array($url);
$latest_topics = "SELECT * FROM $table_prefix".topics." WHERE topic_approved = '1' ORDER BY topic_time DESC LIMIT 0,$latest";
$topics = mysql_query($latest_topics);

echo "

<table style='width: 620px; color: #FFFFFF; font-size:14px;'>

<tr style='background:#; height:30px; align:center;'><td style='border: 1px solid #FFFFFF;'>Тема</td><td style='border: 1px solid #FFFFFF;'>Автор</td><td style='border: 1px solid #FFF;'>Отговори</td><td style='border: 1px solid #FFF;'>Преглеждания</td></tr>

";
while($row = mysql_fetch_array($topics))
{
extract($row);
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{

$topics_p = mysql_query("SELECT * FROM $table_prefix".users." WHERE `user_id`='$topic_poster'");
$row2 = mysql_fetch_array($topics_p);
$poster = $row2['username'];

$forums = mysql_query("SELECT * FROM $table_prefix".forums." WHERE `forum_id`='$forum_id'");
$row3 = mysql_fetch_array($forums);
$forum5 = $row3['forum_name'];


$topic_title = substr($topic_title,0,$simvoli);
if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}
else
{
$ntopic = $topic_title;
}


echo "
<tr style='height:45px'>
<td style='background:#; border: 1px solid #FFF; width:350px; text-align:left;'><div style='padding: 0px 0 0 10px;' class='last_news'>

<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id."' target='_blank' class='last_news'><font color='#38719c'>'".$ntopic."'</font></a>
<br>
<font size='2px'>(<a href='".$phpbb_root_path."viewforum.php?f=".$forum_id."' target='_blank' class='last_news'>".$forum5."</a>)</font>
</div></td>
<td style='border: 1px solid #FFF;'><div style='padding: 0px 0 0 10px;' class='last_news'><a href='".$phpbb_root_path."memberlist.php?mode=viewprofile&u=".$topic_poster."' target='_blank' class='last_news'>".$poster."</a></div></td>
<td style='colour: #000; border: 1px solid #FFF;'>".$topic_replies."</td>
<td style='border: 1px solid #FFF;'>".$topic_views."</td>
</tr>





";
}
}

echo "</table>";
?></center>
 
Код:
<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id."' target='_blank' class='last_news'><font color='#38719c'>"'.$ntopic.'"</font></a>

<--225
 
MrBlack каза:
На мястото на това -->
...
Някой ще може ли да помогне?!
Какво не работи, нищо не ти изкарва или?
Идеята беше да ползваш горния код, като промениш само условията.
Иначе по-горните кодове можеш да изтриеш само
$topic_title = substr($topic_title,0,$simvoli);
понеже веднъж режеш заглавието, и така условието никога няма да се изпълни :idea:
 
Добре хора вече взимам да си мисля,че аз съм малоумен и нещо не правя както трябва...

Слагам този код

Код:
<center>
<?php
include "forum/config.php";
//Брой на последните теми, които искате да се показват
$latest = "6";


$simvoli = 8; // до кой символ да изкарва заглавието


$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
if (!$link)
{
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected)
{
die ('Can\'t use foo : ' . mysql_error());
}
mysql_query("SET NAMES cp1251");
$get_url = "SELECT config_name, config_value FROM $table_prefix".config." WHERE config_name = 'server_name' LIMIT 0,1";
$url = mysql_query($get_url);
$url = mysql_fetch_array($url);
$latest_topics = "SELECT * FROM $table_prefix".topics." WHERE topic_approved = '1' ORDER BY topic_time DESC LIMIT 0,$latest";
$topics = mysql_query($latest_topics);


 
echo "

<table style='width: 620px; color: #FFFFFF; font-size:14px;'>

<tr style='background:#; height:30px; align:center;'><td style='border: 1px solid #FFFFFF;'>Тема</td><td style='border: 1px solid #FFFFFF;'>Автор</td><td style='border: 1px solid #FFF;'>Отговори</td><td style='border: 1px solid #FFF;'>Преглеждания</td></tr>

";
while($row = mysql_fetch_array($topics))
{
extract($row);
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{

$topics_p = mysql_query("SELECT * FROM $table_prefix".users." WHERE `user_id`='$topic_poster'");
$row2 = mysql_fetch_array($topics_p);
$poster = $row2['username'];

$forums = mysql_query("SELECT * FROM $table_prefix".forums." WHERE `forum_id`='$forum_id'");
$row3 = mysql_fetch_array($forums);
$forum5 = $row3['forum_name'];



$topic_title = substr($topic_title,0,$simvoli);
if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}
else
{
$ntopic = $topic_title;
}


echo "
<tr style='height:45px'>
<td style='background:#; border: 1px solid #FFF; width:350px; text-align:left;'><div style='padding: 0px 0 0 10px;' class='last_news'>

<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id." 'target='_blank' class='last_news'><font color='#38719c'>".$ntopic."</font></a>
<br>
<font size='2px'>(<a href='".$phpbb_root_path."viewforum.php?f=".$forum_id."' target='_blank' class='last_news'>".$forum5."</a>)</font>
</div></td>
<td style='border: 1px solid #FFF;'><div style='padding: 0px 0 0 10px;' class='last_news'><a href='".$phpbb_root_path."memberlist.php?mode=viewprofile&u=".$topic_poster."' target='_blank' class='last_news'>".$poster."</a></div></td>
<td style='colour: #000; border: 1px solid #FFF;'>".$topic_replies."</td>
<td style='border: 1px solid #FFF;'>".$topic_views."</td>
</tr>





";
}
}

echo "</table>";
?></center>


При което всичко излиза заглавието се съкращава,но след него не изписва "..."?Това е проблема.Кажете сега в този код аз ли съм объркал нещо или не знам просто вече толкова примери ми дадохте при мен ли не става или ... !?
 
:idea:

PHP:
<center>
<?php
include "forum/config.php";
//Брой на последните теми, които искате да се показват
$latest = "6";


$simvoli = 8; // до кой символ да изкарва заглавието


$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
if (!$link)
{
die('Not connected : ' . mysql_error());
}
$db_selected = mysql_select_db("$dbname", $link);
if (!$db_selected)
{
die ('Can\'t use foo : ' . mysql_error());
}
mysql_query("SET NAMES cp1251");
$get_url = "SELECT config_name, config_value FROM $table_prefix".config." WHERE config_name = 'server_name' LIMIT 0,1";
$url = mysql_query($get_url);
$url = mysql_fetch_array($url);
$latest_topics = "SELECT * FROM $table_prefix".topics." WHERE topic_approved = '1' ORDER BY topic_time DESC LIMIT 0,$latest";
$topics = mysql_query($latest_topics);


 
echo "

<table style='width: 620px; color: #FFFFFF; font-size:14px;'>

<tr style='background:#; height:30px; align:center;'><td style='border: 1px solid #FFFFFF;'>Тема</td><td style='border: 1px solid #FFFFFF;'>Автор</td><td style='border: 1px solid #FFF;'>Отговори</td><td style='border: 1px solid #FFF;'>Преглеждания</td></tr>

";
while($row = mysql_fetch_array($topics))
{
extract($row);
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{

$topics_p = mysql_query("SELECT * FROM $table_prefix".users." WHERE `user_id`='$topic_poster'");
$row2 = mysql_fetch_array($topics_p);
$poster = $row2['username'];

$forums = mysql_query("SELECT * FROM $table_prefix".forums." WHERE `forum_id`='$forum_id'");
$row3 = mysql_fetch_array($forums);
$forum5 = $row3['forum_name'];



$topic_title = substr($topic_title,0,$simvoli);

$ntopic = $topic_title;

if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}

echo "
<tr style='height:45px'>
<td style='background:#; border: 1px solid #FFF; width:350px; text-align:left;'><div style='padding: 0px 0 0 10px;' class='last_news'>

<a href='".$phpbb_root_path."viewtopic.php?f=".$forum_id."&t=".$topic_id." 'target='_blank' class='last_news'><font color='#38719c'>".$ntopic."</font></a>
<br>
<font size='2px'>(<a href='".$phpbb_root_path."viewforum.php?f=".$forum_id."' target='_blank' class='last_news'>".$forum5."</a>)</font>
</div></td>
<td style='border: 1px solid #FFF;'><div style='padding: 0px 0 0 10px;' class='last_news'><a href='".$phpbb_root_path."memberlist.php?mode=viewprofile&u=".$topic_poster."' target='_blank' class='last_news'>".$poster."</a></div></td>
<td style='colour: #000; border: 1px solid #FFF;'>".$topic_replies."</td>
<td style='border: 1px solid #FFF;'>".$topic_views."</td>
</tr>





";
}
}

echo "</table>";
?></center>
 
*Оправих го с помоща на lortnoc !


Замених този код:

PHP:
$simvoli= 35;

с



PHP:
$maxLen = 35;


и

този код:

PHP:
$topic_title = substr($topic_title,0,$simvoli);

$ntopic = $topic_title;

if (strlen($topic_title) > $simvoli)
{
$ntopic = $topic_title."...";
}

с

PHP:
$topic_title=(strlen($topic_title) > $maxLen ? substr($topic_title, 0, $maxLen) . ' ...' : $topic_title);







Всичко се получи идеално...Огромно благодаря на Lortnoc !
 

Back
Горе