PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JS zum Kampagnenlöschen im AF



eaxo
23.01.2010, 21:30
Hallo,

ich habe gerade bei einem Sponsor auf den Kopf 100 Kampagnen löschen müssen, die entgegen den AGB des Ursprungssponsors weiter vermarktet wurden.

Da die Übersichtsseite bei jedem löschen neu geladen wurde ( > 200 Banner, ressourcenhungrig ) wollte ich mal fragen ob jemand ein Tut oder Schnippsel hat der den
normalen Link ( ?content=/interfacebanner/SPONSOR&blacklist=true&tan=LANGE_ZEICHENFOLGE )
gegen einen Button tauscht, welcher eine eigens angelegte Datei aufruft ohne das eine Ausgabe erfolgt.
Der Button kann ja via CSS nach dem Klicken ausgeblendet werden...

JS ist so gar nicht mein Ding, gibts dabei ne Möglichkeit die Datei aufzurufen, sonst fällt mir nichts ein.

eaxo

Parl
23.01.2010, 22:27
Bin leider auch kein JS Experte, aber hab dennoch eine effektive Lösung:

Erstelle einen Ordner "ajax" im adminforce verzeichnis. Erstelle darin 2 Dateien

1. ajax.js mit folgendem Inhalt:



var request = false;

function delete_campain(tan) {
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {}
}
}

if (!request) {
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
} else {
var url = "ajax/del_camp.php?tan="+tan+"";
request.open('post', url, true);
request.send(null);
request.onreadystatechange = mach_was;
}
}

function mach_was() {
switch (request.readyState) {
case 4:
if (request.status != 200) {
alert("Fehler:"+request.status);
} else {
var content = request.responseText;
document.getElementById("del_msg").style.display = 'block';
document.getElementById('del_msg').innerHTML = content;
}
break;
default:
break;
}
}



function schliessen(ziel) {
if (!ziel) {
document.getElementById("del_msg").style.display = 'none';
} else {
document.getElementById(ziel).style.display = 'none';
}}


2. del_camp.php mit folgendem Inhalt:



<?
require_once('../../lib/functions.lib.php');
db_connect();
session_start();
if ($_SESSION['admin'] != 1) exit;
echo '<div align="right"><a href="javascript:schliessen()">X</a><br></div>';
$tan = addslashes($_GET['tan']);
if ($tan != '') db_query('DELETE FROM '.$db_prefix.'_gebuchte_werbung WHERE tan = "'.$tan.'" LIMIT 1');
if (mysql_affected_rows() == 1) echo 'Kampagne '.$tan.' wurde gel&ouml;scht!';
db_close();

EDIT: Von den folgenden Dateien vorsichtshalber ein Backup machen!

Danach das Script in den Header einbinden , adminforce/lib/header.php über </head> einfügen:



<script language="javascript" src="ajax/ajax.js"></script>


Falls du dort schon ne ajax.js drin hast, kannste diese hier natürlich auch umbenennen.

und der letzte Schritt:

Die Datei öffnen, wo die eigentliche Lösch-Funktion drin ist. Ich nehm hier mal als Beispiel die adminforce/content/interfacebanner/dsn-ads.php:

Füge im HTML Bereich, dabei darauf achten nicht zwischen <? und ?> zu schreiben, folgendes ein,



<div id="del_msg" style="style:display:none;position:fixed;z-index:2;width:300px;height:100px;top:40%;left:20%; border:solid 1px black;background-color:#DEDEDE;"></div>


und zu guter letzt die Lösch Funktion an sich:

aus:


<a href="?content=/interfacebanner/dsn-ads&loeschen=true&kid='.$anzeigen['kid'].'" target="_self">Löschen</a>

muss:



<a href="javascript:delete_campain(\''.$anzeigen['kid'].'\')">Löschen</a>


Habe das jetzt genauso bei mir eingebaut und es klappt ganz gut. Muss natürlich nix heissen, aber Versuch macht kluch. :D

MFG

eaxo
23.01.2010, 23:14
Hab gerade gesehen das die Banner dadurch ja "nur" aus der Tabelle gelöscht werden. Beim nächsten Cronlauf sind die dann doch wieder da.
Aber als Schnippsel auf dem Weg zur Lösung nehm ich das gerne mit.


eaxo

Parl
23.01.2010, 23:19
Yup, das ist beim löschen normal so.

Kannst den Query aber auch abändern in z.B.:



db_query('UPDATE '.$db_prefix.'_gebuchte_werbung SET status = 2 WHERE tan = "'.$tan.'" LIMIT 1');


oder ggf. durch einen Blacklist-query ersetzen, je nachdem obs das bei dir gibt.