Invision Community ma bardzo ciekawą funkcjonalność, która pozwala nam na blokowanie wstawianie linków z wybranych domen. Na czym to polega i jak to działa dowiesz się z tego wpisu.

Jak ustawić blokowanie domen?

Wystarczy wykonać następujące czynności:

  1. Zaloguj się do ACP (panel administratora)
  2. W zakładce System znajdź sekcję Ustawienia
  3. W sekcji Ustawienia znajdź pozycję Pisanie i przejdź do tych ustawień
  4. W ustawieniach Pisanie przejdź do zakładki Adresy URL
  5. Następnie w sekcji Filtrowanie adresów URL wybieramy opcję Zezwalaj na dowolne adresy URL z wyjątkiem określonych i uzupełniamy ją w następujący sposób:

Jak działa blokowanie domen w Invision Community?

Zasada działania mechanizmu jest stosunkowo prosta. W panelu administratora definiujemy domeny, które mają być blokowane oraz wybieramy akcję dla treści, w których ktoś doda link do takiej strony. Do wyboru mamy dwie opcje:

  • Blokowanie linku
  • Przekazanie treści do moderowania

W przypadku wybrania opcji blokowania linku Invision Community robi taki trick, że z linka usuwa element href. Czyli jeśli mamy link np. do onetu w postaci:

[html]<a href="http://www.onet.pl">Portal Onet</a>[/html]

to oprogramowanie zrobi nam z tego coś takiego:

[html]<a class="ipsType_noLinkStyling">Portal Onet</a>[/html]

Czyli nadal mamy link, tyle, że nie jest on już klikalny.

Jak sobie poradzić z parsowaniem linków w Invision Community?

Aby poradzić sobie z takim parsowaniem linków musimy stworzyć własny hook. Hook powinien rozszerzać klasę: \IPS\Text\Parser a najprostszym sposobem jest nadpisanie metody protected function _parseContent( $value ).

Poniżej przedstawiam przykładowy kod, który można do tego wykorzystać.

[php title=”hook: \IPS\Text\Parser”]
/**
* Parse BBCode, Profanity, etc. by loading into a DOMDocument
*
* @param string $value HTML to parse
* @return string
*/
protected function _parseContent( $value )
{
$content = parent::_parseContent( $value );

if( preg_match_all( ‚#&lt;a(.*?)class="ipsType_noLinkStyling(.*?)&gt;(.*?)&lt;\/a&gt;#i’, $content, $matches ) )
{
if( count( $matches[ 0 ] ) &amp;&amp; count( $matches[ 3 ] ) )
{
foreach( $matches[ 0 ] as $idx =&gt; $search )
{
$content = str_replace( $search, $matches[ 3 ][ $idx ], $content );
}
}
}

return $content;
}
[/php]

Niestety nie da się tego zrobić w przystępniejszy sposób i wyłączyć wprost parsowania linków. Zachęcam do eksperymentowania we własnym zakresie.

Jeśli macie jakieś pytania to zachęcam do kontaktu.

Write A Comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.