Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим: вы сами будете нести ответственность за этот словарь, включая сбор мусора (из переменных в-dict) и т. Д. Есть либо нет локальности или глобальности для переменных переменных, это зависит от глобальности словаря, если вы хотите переименовать имя переменной, вам придется делать это вручную, однако вы гораздо более гибкие, например вы можете решить перезаписать существующие переменные или ... ... выбрать для реализации константных переменных для создания исключения при перезаписи для разных типов и т. д.
Тем не менее, я применил переменный переменный менеджер-класс который обеспечивает некоторые из вышеуказанных идей. Он работает для python 2 и 3.
Вы использовали бы variable variables manager следующим образом:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
Если вы хотите разрешить переписывание переменных с одним и тем же типом:
myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)
Это то, что я использую:
// strip tags to avoid breaking any html
$string = strip_tags($string);
if (strlen($string) > 500) {
// truncate string
$stringCut = substr($string, 0, 500);
$endPoint = strrpos($stringCut, ' ');
//if the string doesn't contain any space then it will cut without word basis.
$string = $endPoint? substr($stringCut, 0, $endPoint):substr($stringCut, 0);
$string .= '... <a href="/this/story">Read More</a>';
}
echo $string;
Вы можете настроить его дальше, но он выполняет свою работу в процессе производства.
<?php $string = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.";
if (strlen($string) > 25) {
$trimstring = substr($string, 0, 25). ' <a href="#">readmore...</a>';
} else {
$trimstring = $string;
}
echo $trimstring;
//Output : Lorem Ipsum is simply dum [readmore...][1]
?>
Предельные слова в тексте:
function limitTextWords($content = false, $limit = false, $stripTags = false, $ellipsis = false)
{
if ($content && $limit) {
$content = ($stripTags ? strip_tags($content) : $content);
$content = explode(' ', $content, $limit+1);
array_pop($content);
if ($ellipsis) {
array_push($content, '...');
}
$content = implode(' ', $content);
}
return $content;
}
Предельные символы в тексте:
function limitTextChars($content = false, $limit = false, $stripTags = false, $ellipsis = false)
{
if ($content && $limit) {
$content = ($stripTags ? strip_tags($content) : $content);
$ellipsis = ($ellipsis ? "..." : $ellipsis);
$content = mb_strimwidth($content, 0, $limit, $ellipsis);
}
return $content;
}
Использование:
$text = "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.";
echo limitTextWords($text, 5, true, true);
echo limitTextChars($text, 5, true, true);
Просто используйте это, чтобы удалить текст:
echo strlen($string) >= 500 ?
substr($string, 0, 490) . ' <a href="link/to/the/entire/text.htm">[Read more]</a>' :
$string;
Изменить и, наконец:
function split_words($string, $nb_caracs, $separator){
$string = strip_tags(html_entity_decode($string));
if( strlen($string) <= $nb_caracs ){
$final_string = $string;
} else {
$final_string = "";
$words = explode(" ", $string);
foreach( $words as $value ){
if( strlen($final_string . " " . $value) < $nb_caracs ){
if( !empty($final_string) ) $final_string .= " ";
$final_string .= $value;
} else {
break;
}
}
$final_string .= $separator;
}
return $final_string;
}
Здесь разделитель является ссылкой href для чтения больше;)
Другой способ: вставьте следующий файл в файл function.php вашей темы.
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'custom_trim_excerpt');
function custom_trim_excerpt($text) { // Fakes an excerpt if needed
global $post;
if ( '' == $text ) {
$text = get_the_content('');
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = x;
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '...');
$text = implode(' ', $words);
}
}
return $text;
}
Вы можете использовать это.
Я собрал два разных ответа:
$string = strip_tags($strHTML);
$yourText = $strHTML;
if (strlen($string) > 350) {
$stringCut = substr($post->body, 0, 350);
$doc = new DOMDocument();
$doc->loadHTML($stringCut);
$yourText = $doc->saveHTML();
}
$yourText."...<a href=''>View More</a>"
<?php
$images_path = 'uploads/adsimages/';
$ads = mysql_query("select * from tbl_postads ORDER BY ads_id DESC limit 0,5 ");
if(mysql_num_rows($ads)>0)
{
while($ad = mysql_fetch_array($ads))
{?>
<div style="float:left; width:100%; height:100px;">
<div style="float:left; width:40%; height:100px;">
<li><img src="<?php echo $images_path.$ad['ads_image']; ?>" width="100px" height="50px" alt="" /></li>
</div>
<div style="float:left; width:60%; height:100px;">
<li style="margin-bottom:4%;"><?php echo substr($ad['ads_msg'],0,50);?><br/> <a href="index.php?page=listing&ads_id=<?php echo $_GET['ads_id'];?>">read more..</a></li>
</div>
</div>
<?php }}?>
В принципе, вам нужно интегрировать ограничитель слов (например, что-то вроде этого ) и использовать что-то вроде shadowbox . Ваша ссылка на ссылку будет ссылаться на скрипт PHP, который отображает всю статью. Просто установите Shadowbox на эти ссылки, и вы настроены. (См. Инструкции на своем сайте. Его легко.)
Этот метод не будет усекать слово посередине.
list($output)=explode("\n",wordwrap(strip_tags($str),500),1);
echo $output. ' ... <a href="#">Read more</a>';
strip_tags
находится там, потому что большинство сайтов, на которых я работал, просто хотят использовать текстовые сообщения (которые затем ссылаются на страницу с полностью форматированной статьей). Если вы хотите сохранить HTML, вы можете использовать синтаксический анализатор XML, чтобы захватить текстовые значения каждого подэлемента, скопировав количество символов, а также проверив возможное поломку тега. Это гораздо более сложная проблема и далеко выходит за рамки этого вопроса. – webbiedave 1 October 2015 в 02:29$teaser = ($endPoint ? substr($stringCut, 0, $endPoint) : substr($stringCut, 0)) . ' ...';
. Кроме того, это приятное решение. – azurecorn 6 July 2018 в 13:45