[SOLVED] Über REX_LINK_BUTTON eingebundene Artikel löschen

Jede Art von Fehler die REDAXO betreffen.

[SOLVED] Über REX_LINK_BUTTON eingebundene Artikel löschen

Beitragvon frood » 9. Jun 2011, 13:40

Moin!

Ich habe gerade mit Erstaunen festgestellt, dass man Artikel, die über den REX_LINK_BUTTON in einem anderen Artikel eingebunden sind, ohne Warnung löschen kann. Das ist mir bisher in einigen Jahren der Redaxo-Nutzung nie aufgefallen :!: Es erzeugt zwar keinen Fehler in der Ausgabe, eine Warnung wäre aber trotzdem schön, damit man nicht aus Versehen woanders leere Bereiche ausgibt.

Kann es hier eine Warnung geben ähnlich wie die beim Löschen eines Moduls (".. wird verwendet von blabla ... ")? Forum hab ich durchsucht ....

REDAXO: 4.3.2
PHP: 5.2.6

Gruss Marc
Zuletzt geändert von frood am 9. Jun 2011, 16:50, insgesamt 1-mal geändert.
frood
 
Beiträge: 86
Registriert: 7. Okt 2008, 14:17

Re: Über REX_LINK_BUTTON eingebundene Artikel löschen

Beitragvon Oliver.Kreischer » 9. Jun 2011, 13:56

Hi Marc,

frood hat geschrieben:..es erzeugt zwar keinen Fehler in der Ausgabe..
Das kommt auf die Ausgabe an...

Guck mal hier: module-aktionen-f28/loschen-eines-artikels-rex-linklist-button-t16119.html#p88997

Das verhindert zumindest evtl. auftretende Fehler!

LG
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1820
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Über REX_LINK_BUTTON eingebundene Artikel löschen

Beitragvon frood » 9. Jun 2011, 14:44

Das kommt auf die Ausgabe an...

... und ist nicht das Problem ;)

Guck mal hier: module-aktionen-f28/loschen-eines-artikels-rex-linklist-button-t16119.html#p88997

Das verhindert zumindest evtl. auftretende Fehler!

Hatte ich gelesen, ist aber auch nicht das, was ich suche .... wie gesagt, Ausgabefehler sind nicht mein Problem.

Versuche es über die structure.inc.php ...
Zuletzt geändert von frood am 9. Jun 2011, 17:52, insgesamt 1-mal geändert.
frood
 
Beiträge: 86
Registriert: 7. Okt 2008, 14:17

Re: Über REX_LINK_BUTTON eingebundene Artikel löschen

Beitragvon Oliver.Kreischer » 9. Jun 2011, 14:50

Hi Marc,

ok ich werde es demnächst mehr bachten wenn jemand "Forum hab ich durchsucht ...." schreibt. :-)
Vielleicht hat ja noch jemand einen Tipp... Ich muss passend.

Liebe Grüße
Oliver
http://kreischer.de - "It's very simple - you read the protocol and write the code." - Bill Joy
Benutzeravatar
Oliver.Kreischer
 
Beiträge: 1820
Registriert: 16. Dez 2004, 23:03
Wohnort: Feldafing

Re: Über REX_LINK_BUTTON eingebundene Artikel löschen

Beitragvon frood » 9. Jun 2011, 16:50

So, ich hab's selbst hinbekommen, indem ich die structure.inc.php an passender Stelle modifiziert habe:
Funktioniert jetzt auch für Artikel, die in Freitext verlinkt sind.

Ca. ab Zeile 156 (Änderungen sind mit Mod gekennzeichnet):

Code: Alles auswählen
      // --------------------- ARTIKEL DELETE

   // Mod 1
   // Ist der Artikel über REX_LINK irgendwo eingebunden? Dann nicht löschen, sondern Warnung
   $check = new rex_sql;
   //$check->debugsql = 1; //Ausgabe Query
   $check->setQuery('select * from '.$REX['TABLE_PREFIX'].'article_slice where
                  link1='.$article_id.' or
                  link2='.$article_id.' or
                  link3='.$article_id.' or
                  link4='.$article_id.' or
                  link5='.$article_id.' or
                  link6='.$article_id.' or
                  link7='.$article_id.' or
                  link8='.$article_id.' or
                  link9='.$article_id.' or
                  link10='.$article_id.'
                  ');

   for($i=0;$i<$check->getRows();$i++)
   {
      $found = $check->getValue("rex_article_slice.article_id");
      // Kategorie herausfinden
      $check_cat = new rex_sql;
      $check_cat->setQuery('select * from '.$REX['TABLE_PREFIX'].'article where id='.$found.'');
      // Ausgabe für Warnung
      $check_output .= 'Eingebunden in <a href="./index.php?page=content&article_id='.$found.'&category_id='.$check_cat->getValue("re_id").'&mode=edit&clang=0">'.$check_cat->getValue("name").' ['.$found.']</a></br>';
      
      $check->counter++;
   }
   
   if($check_output!=""){
   $warning = 'Artikel kann nicht gel&ouml;scht werden, da er in einen anderen Artikel eingebunden ist:<br>'.$check_output;
   }
   
   // Ist der Artikel in einem Freitext verlinkt? ( Suche nach "redaxo://id" )
   $checklink = new rex_sql;
   //$checklink->debugsql = 1; //Ausgabe Query
   $checklink->setQuery('select * from '.$REX['TABLE_PREFIX'].'article_slice where
                  value1 LIKE "%redaxo://'.$article_id.'%" or
                  value2 LIKE "%redaxo://'.$article_id.'%" or
                  value3 LIKE "%redaxo://'.$article_id.'%" or
                  value4 LIKE "%redaxo://'.$article_id.'%" or
                  value5 LIKE "%redaxo://'.$article_id.'%" or
                  value6 LIKE "%redaxo://'.$article_id.'%" or
                  value7 LIKE "%redaxo://'.$article_id.'%" or
                  value8 LIKE "%redaxo://'.$article_id.'%" or
                  value9 LIKE "%redaxo://'.$article_id.'%" or
                  value10 LIKE "%redaxo://'.$article_id.'%" or
                  value11 LIKE "%redaxo://'.$article_id.'%" or
                  value12 LIKE "%redaxo://'.$article_id.'%" or
                  value13 LIKE "%redaxo://'.$article_id.'%" or
                  value14 LIKE "%redaxo://'.$article_id.'%" or
                  value15 LIKE "%redaxo://'.$article_id.'%" or
                  value16 LIKE "%redaxo://'.$article_id.'%" or
                  value17 LIKE "%redaxo://'.$article_id.'%" or
                  value18 LIKE "%redaxo://'.$article_id.'%" or
                  value19 LIKE "%redaxo://'.$article_id.'%" or
                  value20 LIKE "%redaxo://'.$article_id.'%"                
                  ');

   for($i=0;$i<$checklink->getRows();$i++)
   {
      $foundlink = $checklink->getValue("rex_article_slice.article_id");
      // Kategorie herausfinden
      $check_catlink = new rex_sql;
      $check_catlink->setQuery('select * from '.$REX['TABLE_PREFIX'].'article where id='.$foundlink.'');
      // Ausgabe für Warnung
      $check_outputlink .= 'Verlinkt in <a href="./index.php?page=content&article_id='.$foundlink.'&category_id='.$check_catlink->getValue("re_id").'&mode=edit&clang=0">'.$check_catlink->getValue("name").' ['.$foundlink.']</a></br>';
      
      $checklink->counter++;
   }
   
   if($check_outputlink!=""){
   $warning .= 'Artikel kann nicht gel&ouml;scht werden, da er in einem anderen Artikel verlinkt ist:<br>'.$check_outputlink;   
   }

   if($warning==''){      
   // Ende Mod 1 - es folgt Original-Script
   
     // --------------------- ARTIKEL DELETE
     list($success, $message) = rex_deleteArticleReorganized($article_id);
   
     if($success)
       $info = $message;
     else
       $warning = $message;

   // Mod 2
   }
   //Ende Mod 2 - Ende aller Modifikationen

Funktioniert gut, aber vielleicht gibt es noch eine sauberere Methode ... immer raus damit :wink:

Fröhliches Coden noch!
Gruss Marc
frood
 
Beiträge: 86
Registriert: 7. Okt 2008, 14:17


Zurück zu Bugs [R4]

Wer ist online?

Mitglieder in diesem Forum: Exabot [Bot] und 1 Gast