Некоторое время назад на моём сайте возникла необходимость «обрезать» часть ссылок. Из-за их излишней длины искажались таблици сайта.
Итак имеем:
- Строку с именем сслыки
- Строку с адресом ссылки
Как вы уже наверное догадались я выводил ссылки в цикле при помощи функции printf().
При этом мне нужно укоротить только название! Это делается примерно таким образом (хотя всегда могут быть вариации кода) :
$linkName = «Имя ссылки»; ///Чтобы не усложнять код я задам ссылку двумя переменными.
$linkTarget = «https://how2.org.ua/»;
$maxLength = 20; ////максимальная длина ссылки. Если она больше, значит необходимо укоротить название
if (strlen($strName) > $maxLength) {
$strName = substr($strName,0,$maxLength).»…»;
}
/* В переменную $strName теперь попал укороченный вариант названия с тремя символами точки в конце */
/* Можем вывести её обычным образом */
printf(«<a href=%s>%s</a>», $strTarget, $strName);
Вот и всё! В итоге мы получим ссылку укороченную до заданной в переменной $maxLength длины.
Если вы не используете имена для своих ссылок, вам необходимо продублировать переменную со ссылкой. Теперь одна из них должна остаться неизменной, а вторую следует преобразовать по методу описанному выше.
Иногда может возникнуть ситуация, когда нам необходимо показать начало и конец ссылки, выбросив её середину (чаще всего это необходимо как раз в случае не имения «имени» ссылки).
Это можно сделать таким образом:
<?php
$link = «https://how2.org.ua/view/article.php»; /// к примеру имеем такую ссылку
$new = split(‘/’, $link); ///разделим все её элементы и запишем их в массив
print_r($new); ///для наглядности выведем массив на экран
$last = count($new); /// узнаем длину массива
/* Так как мы разделяли ссылку при помощи символа ‘ / ‘ два первых элемента массива не имеют смысла! Первый содержит ‘https:’ , а второй пуст.*/
$name = «https://».$new[2].»/…/».$new[$last-1];
/* Из-за того, что массив начинается с нулевого элемента необходимо добавить не $last элемент, а на 1 меньший */
printf(«<a href=%s>%s</a>»,$link,$name); ///выведем полученную ссылку
?>
У меня получилось вот так:
Array
(
[0] => https:
[1] =>
[2] => how2.org.ua
[3] => view
[4] => article.php
)
https://how2.org.ua/…/article.php
Стоит отметить, что приведенная ссылка не работает. Она ссылается на несуществующую страницу и приведена сугубо для примера.
Ещё одном методом является разбиение строки-названия и вывод начала. Этот метод очень похож на первый, но используя его, мы обезопасимся себя от «случайного» изменения строки (никогда не будет недописанных слов и символов-артефактов).
Итак, разобьём строку при помощи функции split если превышена заданная длина строки:
if (strlen($last[‘title’]) > 60) {
$text = split(» «, $last[‘title’]); ///в качестве разделителя используем символ пробела
$title = $text[0].» «.$text[1].» «.$text[2].»…»; ///выводим 3 первых слова и троеточие
}
Такой метод естественно следует использовать для ссылок с именами.