Перейти к содержимому

Фотография

Программеры, помогите...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 24 Август 2011 - 17:01

Выполняя заказ, пришлось затронуть PHP код, а я с ним пока на "Вы"... И сроки горят...

Вот этот касок кода:

<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){

echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.$row[content].' <a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'" class="darkgrey xsmltxt">...</a> </div>';
echo '</div>';
echo '<div class="aboutpost author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>

выводит на страницу сайта последние комментарии с постов...

Вот этот блок:

echo '<div class="content_comm">'.$row[content].' <a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'" class="darkgrey xsmltxt">...</a> </div>';

выводит текст комментариев, в частности, переменная:

$row[content]

Как сделать обрезку выводимого текста комментария до определённого колличества символов (или слов)?

Буду очень признателен за помощь.
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


На правах рекламы

#2 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 13:42

Никто не знает?
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#3 Анатолий Белоусов

Анатолий Белоусов

    Основатель форума

  • Администрация
  • 27 347 сообщений
8 763
Очень хороший
  • Страна, Город:
    Россия, г. Ижевск
  • Пол:Мужчина

Отправлено 25 Август 2011 - 14:43

Никто не знает?



Задайте вопрос в закрытой ветке авторов курса Киберсант-Вебмастер... :rolleyes:
  • 0

Обучение ИНВЕСТИРОВАНИЮ и ТРЕЙДИНГУ - https://www.infoclub.info
Известнейшее мультимедийное ИЗДАТЕЛЬСТВО - http://www.info-dvd.ru

Авторский блог АНАТОЛИЯ БЕЛОУСОВА - http://www.cyberdengi.com


#4 FORS

FORS

    Никогда не сдавайся!

  • Киберсанты
  • PipPipPipPipPip
  • 1 112 сообщений
302
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 14:50

<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){

$string = $row[content];

$maxlen = 20;

function cutString($string, $maxlen) {
	
	$len = strlen($string);
	
	if ($len > $maxlen) {
		
		$cutStrD = strripos(substr($string, 0, $maxlen), ' ');
		$cutStr = substr($string, 0, $cutStrD);
		echo $cutStr . '...';
		
	} else {
		$cutStr = substr($string, 0, $len);
		echo $cutStr;
	}

echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.cutString($string, $maxlen).' <a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'" class="darkgrey xsmltxt">...</a> </div>';
echo '</div>';
echo '<div class="aboutpost author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>

Вроде как должно работать) и Обрезать не по количествую символов.. а если слово еще "не кончилось" на тот момент, то ищет предыдущий пробел и на нем обрывает ставя ...

$maxlen = 20; разумеется длина

Сообщение отредактировал Олег Сартаков: 25 Август 2011 - 14:51

  • 0

Все будет Хорошо!=)


#5 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 15:28

Задайте вопрос в закрытой ветке авторов курса Киберсант-Вебмастер... :rolleyes:

У меня нет туда доступа...

Вроде как должно работать)

Не работает, Олег... Возможно, из-за кодировки... Где-то читал, что некоторые функции обрезки некорректно работают с UTF-8... А сайт именно в UTF-8.
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#6 FORS

FORS

    Никогда не сдавайся!

  • Киберсанты
  • PipPipPipPipPip
  • 1 112 сообщений
302
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 18:23

Не работает, Олег... Возможно, из-за кодировки... Где-то читал, что некоторые функции обрезки некорректно работают с UTF-8... А сайт именно в UTF-8.


а так?


<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){

$string = $row[content]

$maxlen = 20;

function cutString($string, $maxlen) {
	mb_internal_encoding("UTF-8");	

	$len = mb_strlen($string);
	
	if ($len > $maxlen) {
		
		$cutStrD = mb_strripos(mb_substr($string, 0, $maxlen), ' ');
		$cutStr = mb_substr($string, 0, $cutStrD);
		echo $cutStr . '...';
		
	} else {
		$cutStr = mb_substr($string, 0, $len);
		echo $cutStr;
	}

echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.cutString($string, $maxlen).' <a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'" class="darkgrey xsmltxt">...</a> </div>';
echo '</div>';
echo '<div class="aboutpost author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>


Сообщение отредактировал Олег Сартаков: 25 Август 2011 - 18:44

  • 0

Все будет Хорошо!=)


#7 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 19:27

а так?

Тоже не работает...

Нашёл решение для ограничения по количеству символов:

<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){

$str=($row[content]);
mb_internal_encoding("UTF-8"); // указываем кодировку
$str =mb_substr($str,0,97); // обрезаем строку до 97 символов

echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.$str.' <a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'">.....</a></div>';
echo '</div>';
echo '<div class="aboutpost_author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>


...но лучше, конечно же, если бы было ограничение по количеству слов. :rolleyes:
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#8 FORS

FORS

    Никогда не сдавайся!

  • Киберсанты
  • PipPipPipPipPip
  • 1 112 сообщений
302
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 19:39

Т.е. оно работает? хотя по идее тоже самое. а что за ошибку выдает? я тут ошибку поправил в своем предыдущем коде) точка с запятой не стояла. ну и так же в скобки взял row[content];

но "ходить" надо "вокруг" функции mb_strripos. она как раз возвращает длину строки по определенному символу, т.е. пробелу.

<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){


$string = ($row[content]);

$maxlen = 20;

function cutString($string, $maxlen) {
        mb_internal_encoding("UTF-8");  

        $len = mb_strlen($string);
        
        if ($len > $maxlen) {
                
                $cutStrD = mb_strripos(mb_substr($string, 0, $maxlen), ' ');
                $cutStr = mb_substr($string, 0, $cutStrD);
                echo $cutStr . '...';
                
        } else {
                $cutStr = mb_substr($string, 0, $len);
                echo $cutStr;
        }



echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.cutString($string, $maxlen).'<a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'">.....</a></div>';
echo '</div>';
echo '<div class="aboutpost_author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>

если не найдешь, я еще узнаю у кого-нибудь) щас прост никого в он-лайне нет)


з.ы. либо может просто так?

<?php
$jc='modx_jot_content';
$jf='modx_jot_fields';
$sc='modx_site_content';
$ua='modx_user_attributes';
$sql="SELECT $jc.content, $jc.id, $jc.uparent, $jc.createdon, (SELECT $jf.content FROM $jf WHERE $jf.label='name' AND $jc.id=$jf.id ORDER BY $jf.id) AS guestname, (SELECT $sc.pagetitle FROM $sc WHERE $jc.uparent=$sc.id ORDER BY $sc.id) AS pagetitle, (SELECT $ua.fullname FROM $ua WHERE $jc.createdby=$ua.id ORDER BY $ua.id) AS regname FROM $jc WHERE $jc.published=1 ORDER BY $jc.createdon DESC LIMIT 3";

$q=$modx->db->query($sql) or die(mysql_error());
while($row = mysql_fetch_array($q)){

$maxlen = 97;
$str=($row[content]);
mb_internal_encoding("UTF-8"); // указываем кодировку
$cutStr = mb_strripos(mb_substr($str, 0, $maxlen), ' '); // находим длину строки до 97го символа где последний пробел.
$str =mb_substr($str,0,$cutStr); // обрезаем строку до полученного выше значения

if (mb_strlen($str)<$maxlen) {
   $str.='...';}

echo '<div class="comment"><div class="ballbtm">';
echo '<div class="content_comm">'.$str.'<a href="'.$modx->makeUrl($row[uparent]).'#'.$row[id].'">.....</a></div>';
echo '</div>';
echo '<div class="aboutpost_author">';
if ($row[guestname]==NULL)
{
echo $row[regname];
} else {
echo $row[guestname];
}
echo '</div></div>';
}
?>

Сообщение отредактировал Олег Сартаков: 25 Август 2011 - 20:01

  • 0

Все будет Хорошо!=)


#9 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 19:56

Т.е. оно работает?

Да.

а что за ошибку выдает?

Ошибок не выдаёт. Просто ничего не выводит.

я тут ошибку поправил в своем предыдущем коде) точка с запятой не стояла. ну и так же в скобки взял row[content];

Пробовал и то и другое. Результата нет.

если не найдешь, я еще узнаю у кого-нибудь) щас прост никого в он-лайне нет)

Буду очень признателен. Спасибо, что уделяешь время.

Если что, это самописный (не мною) сниппет для CMS MODx.
Этот код и есть весь сниппет. Всё работает.
Жаль только, что автор не реализовал ограничение по выводу текста...
Пробовал другие варианты сниппетов, этот единственный, который адекватно заработал.
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#10 FORS

FORS

    Никогда не сдавайся!

  • Киберсанты
  • PipPipPipPipPip
  • 1 112 сообщений
302
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 20:02

Проверь я обновил предыдущий пост
  • 1

Все будет Хорошо!=)


#11 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 20:46

Изображение Изображение Изображение

Отлично! Всё работает как надо! Примного благодаренИзображение!
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#12 FORS

FORS

    Никогда не сдавайся!

  • Киберсанты
  • PipPipPipPipPip
  • 1 112 сообщений
302
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 20:58

незачто!=) всегда рад помогать)

ток поправил еще ошибку в "логике".


$maxlen = 97;
$str=($row[content]);
$str_first=($row[content]);
mb_internal_encoding("UTF-8"); // указываем кодировку
$cutStr = mb_strripos(mb_substr($str, 0, $maxlen), ' '); // находим длину строки до 97го символа где последний пробел.
$str =mb_substr($str,0,$cutStr); // обрезаем строку до полученного выше значения

if (mb_strlen($str_first)>$maxlen) {
   $str.='...';}


Инач он всегда будет троеточие ставить.
  • 0

Все будет Хорошо!=)


#13 Сергей (ex-Gudvin)

Сергей (ex-Gudvin)

    Ученик

  • Киберсанты
  • PipPipPipPipPip
  • 5 785 сообщений
2 710
Очень хороший
  • Пол:Мужчина

Отправлено 25 Август 2011 - 21:29

OK.
  • 0

Кто счастлив, тот и прав. (Л. Н. Толстой)


#14 sharic

sharic

    Ученик

  • Киберсанты
  • PipPip
  • 16 сообщений
0
Обычный

Отправлено 19 Февраль 2012 - 02:16

Надо реально php изучать.
  • 0




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей