{"id":230463,"date":"2022-12-13T15:16:00","date_gmt":"2022-12-13T12:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230463"},"modified":"2022-12-13T15:17:35","modified_gmt":"2022-12-13T12:17:35","slug":"jak-latwo-obcinac-tekst-w-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-latwo-obcinac-tekst-w-php\/","title":{"rendered":"Jak \u0142atwo obcina\u0107 tekst w PHP"},"content":{"rendered":"\n<p>Je\u015bli traktujesz WordPress wy\u0142\u0105cznie jako aplikacj\u0119 do blogowania lub, nawet w bardziej liberalnym sensie, system zarz\u0105dzania tre\u015bci\u0105, prawdopodobnie przywyk\u0142e\u015b do u\u017cywania edytora lub pola fragmentu do napisania zwiastuna, a nast\u0119pnie wprowad\u017a link Czytaj wi\u0119cej<strong>.<\/strong><\/p>\n<h3>WordPress dla aplikacji internetowych (ponownie)<\/h3>\n<p>Dla tych, kt\u00f3rzy czytaj\u0105 t\u0119 stron\u0119 od d\u0142u\u017cszego czasu, jestem szczeg\u00f3lnie zainteresowany wykorzystaniem WordPressa jako podstawy do tworzenia aplikacji internetowych (zobacz tak\u017ce <a href=\"https:\/\/tommcfarlin.com\/web-applications-with-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">to<\/a>, <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-for-web-application-development\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">to<\/a><\/strong>, <strong><a href=\"https:\/\/tommcfarlin.com\/web-application-foundation\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">to<\/a><\/strong> i <strong><a href=\"https:\/\/wordpress.mediadoma.com\/pl\/obiektowy-sposob-pracy-z-modelami-i-aplikacjami-internetowymi\/\" title=\"to\">to<\/a><\/strong> ).<\/p>\n<p>W momencie pisania tego posta jest to artyku\u0142 maj\u0105cy oko\u0142o sze\u015bciu lat.<\/p>\n<p>Zdarzaj\u0105 si\u0119 wi\u0119c sytuacje, w kt\u00f3rych tre\u015b\u0107, kt\u00f3r\u0105 zamierzasz renderowa\u0107 na interfejsie u\u017cytkownika, mo\u017ce pochodzi\u0107 ze \u017ar\u00f3d\u0142a zewn\u0119trznego.<\/p>\n<h3>Powr\u00f3t do spisu tre\u015bci<\/h3>\n<p>Oznacza to, \u017ce aplikacja dzia\u0142a tak:<\/p>\n<ol>\n<li>skontaktowa\u0107 si\u0119 z zewn\u0119trznym API,<\/li>\n<li>importuj dane z po\u0142\u0105czenia i w razie potrzeby je parsuj,<\/li>\n<li>zapisz go do bazy danych,<\/li>\n<li>renderowa\u0107 informacje na interfejsie u\u017cytkownika na \u017c\u0105danie.<\/li>\n<\/ol>\n<p>Jest wiele rzeczy, kt\u00f3re mo\u017cna zrobi\u0107 pomi\u0119dzy ka\u017cdym z powy\u017cszych krok\u00f3w, ale najwa\u017cniejsz\u0105 rzecz\u0105, kt\u00f3r\u0105 chc\u0119 podzieli\u0107 si\u0119 w tym po\u015bcie, jest skuteczny spos\u00f3b \u0142atwego obcinania tekstu za pomoc\u0105 PHP do renderowania na interfejsie u\u017cytkownika.<\/p>\n<p>Jest to przydatne do dostarczania zwiastun\u00f3w, tworzenia link\u00f3w do witryn innych firm i nie tylko, bez konieczno\u015bci r\u0119cznego pisania lub edytowania tre\u015bci.<\/p>\n<p>Aby poda\u0107 przyk\u0142adowy przypadek u\u017cycia funkcji, kt\u00f3r\u0105 zamierzam udost\u0119pni\u0107, warto mie\u0107 pewne wymagania. S\u0105 arbitralne dla tego postu, ale implementacja powinna by\u0107 na tyle konkretna, aby mo\u017cna by\u0142o wrzuci\u0107 to do posta bez \u017cadnych problem\u00f3w.<\/p>\n<p>Za\u0142\u00f3\u017cmy:<\/p>\n<ul>\n<li>pobieramy tekst z zewn\u0119trznego API,<\/li>\n<li>dane s\u0105 przechowywane gdzie\u015b w bazie danych,<\/li>\n<li>dane s\u0105 zwyk\u0142ym tekstem (bez znacznik\u00f3w lub innego rodzaju podmiot\u00f3w internetowych w strukturze),<\/li>\n<li>potrzebujemy funkcji, kt\u00f3ra akceptuje tekst i d\u0142ugo\u015b\u0107 do obci\u0119cia tekstu.<\/li>\n<\/ul>\n<p>Bior\u0105c pod uwag\u0119 te wymagania, mo\u017cemy skonfigurowa\u0107 funkcj\u0119 akceptuj\u0105c\u0105 tekst i d\u0142ugo\u015b\u0107 argument\u00f3w. Je\u015bli tekst jest mniejszy lub r\u00f3wny okre\u015blonej d\u0142ugo\u015bci, nie ma nic do zrobienia; w przeciwnym razie mo\u017cemy skr\u00f3ci\u0107 tekst do okre\u015blonej d\u0142ugo\u015bci i doda\u0107 ko\u0144cowe elipsy.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/97c336e3e7246c9d5f6d46684ff1e6e9#file-00-truncate-text-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Oto kod:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/**\n * Truncates the specified text to the specified length to the last whole word and\n * adds ellipses to the end of the truncated string.\n * \n * @param string $text The text to truncate.\n * @param int $length The maximum allowed length of the text.\n * @return string The text if it's less than the length of the specified length or the text truncated to the specified length.\n *\/\npublic function truncate($text, $length)\n{\n    if ($length &gt;= strlen($text)) {\n      return $text;\n    }\n\n  return preg_replace(\n        \"\/^(.{1,$length})(s.*|$)\/s\",\n        '1...',\n        $text\n    );\n}<\/code><\/pre>\n<p>Implementacje do tego w kontek\u015bcie WordPressa mog\u0105 pochodzi\u0107 z odczytu danych przechowywanych w niestandardowych tabelach, w metadanych post\u00f3w, w tabeli post\u00f3w lub w zasadzie w dowolnym miejscu, w kt\u00f3rym przechowywany jest surowy tekst i chcesz go wyrenderowa\u0107 na interfejsie u\u017cytkownika .<\/p>\n<p>Je\u015bli w tek\u015bcie znajduje si\u0119 inna tre\u015b\u0107, taka jak HTML lub inne elementy, mo\u017ce by\u0107 konieczne wprowadzenie poprawek. Je\u015bli jest w WordPress, istniej\u0105 filtry i inne formy obs\u0142ugi tych danych przed obci\u0119ciem tekstu, ale to wykracza poza cel \u0142atwego obcinania tekstu w PHP, prawda?<\/p>\n<p>Wi\u0119c przynajmniej u\u017cywaj tego wy\u0142\u0105cznie do tekstu i, co najwy\u017cej, uwzgl\u0119dnij inne rodzaje tre\u015bci w tek\u015bcie przed przekazaniem go do <a href=\"https:\/\/php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a> i powiniene\u015b by\u0107 gotowy.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Najwa\u017cniejsz\u0105 rzecz\u0105, kt\u00f3r\u0105 chc\u0119 si\u0119 podzieli\u0107 w tym po\u015bcie, jest skuteczny spos\u00f3b \u0142atwego obcinania tekstu za pomoc\u0105 PHP do renderowania na interfejsie u\u017cytkownika.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,805],"tags":[1169],"class_list":["post-230463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230463"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230463\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}