Postupy Joomla - hacky kódu apod. adsmanager, sobi2, captcha

Datum 13. 11. 2010 20:10:00 | Rubrika: Různé


Adsmanager 2.5 - jednoduchý javascriptový antispam "captcha" do Adsmanageru v Joomle. Funguje v modu registrace i v modu bez registrace.


1)v adsmanageru přidejte textové pole, nazvěte jej overeni resp. ad_overeni, které se Vám automaticky doplní.

Do popisu dejte např.: Ověřovací číslovka: jedenáct
Nastavte další parametry, př. nápovědu
Uložte

2)editace souboru ...components/com_adsmanager/adsmanager.html.php

cca. řádek 1876 za komentářem // add up all error messages

upravte následovně nebo podobně:



// add up all error messages

if (me[i].name == "ad_overeni" && mfrm.ad_overeni.value!="11"){
errorMSG += me[i].getAttribute('mosLabel').replace('&nbsp;',' ') + ' : <?php echo html_entity_decode(addslashes('Vyplňte číslo jedenáct (číslovkou'),ENT_QUOTES); ?>\n';

}
else{

errorMSG += me[i].getAttribute('mosLabel').replace('&nbsp;',' ') + ' : <?php echo html_entity_decode(addslashes(ADSMANAGER_REGWARN_ERROR),ENT_QUOTES); ?>\n';

}

// notify user by changing background color, in this case to red





Uložit. To by mělo být vše.
Vzhledem k tomu, že adsmanager stejně nejede pořádně s vypnutým Javascriptem, tak si myslím, že by to mohlo odradit většinu spam robotů i přesto, že je to řešeno pouze JS. Výkonnější roboti by mohly teoreticky přečíst podmínku testování a doplnit ji.




------------------
úprava css adsmanageru - názvy polí

1)width=100 změnit na width="" nebo na potřebnou šířku
...components/com_adsmanager/adsmanager.html.php
řádek cca. 1939
<td width=""><?php echo ADSMANAGER_FORM_CATEGORY; ?></td>


2)přidání class do td tagu + vertikální zarovnání
...components/com_adsmanager/adsmanager.html.php
řádek cca. 1160

upravit takto:
echo "<tr id='tr_".$field->name."'><td class='adsmanager_levy_td'>".$strtitle."</td>\n";

asi o 10 řádků níže je možné ještě upravit i levy td, takto

echo "<td class='adsmanager_pravy_td'>";



+

v css souboru... components/com_adsmanager/css/adsmanager.css na začátek vložit:


td.adsmanager_levy_td {
vertical-align: middle;
}
adsmanager_pravy_td {

}





a upravit dle potřeby


--------------------------------------------
úprava pro vložení zavináče na pozici kurzoru v poli (adsmanager)
Lze použít po úpravě kdekoliv jinde i v jiných polích

.../components/com_adsmanager/adsmanager.html.php
řádek cca. 1180 upravit nějak takto:
 //pridano 
echo "<tr id='tr_".$field->name."'><td class='adsmanager_levy_td'>".$strtitle;


if($field->name=="ad_email") //misto add_email doplnit nazev sveho pole + nize take
{ echo " <span style='border-bottom: 1px dotted #333;' onclick='insertAtCursor(document.adminForm.ad_email,\"@\");document.adminForm.ad_email.focus();' title='kliknutím na zavináč se přenese na poslední pozici kurzoru v poli.'>@?</span> " ; } echo "</td>\n";


na řádek cca. 1782 do javascriptu přidat funkci:



//pridano - pridani textu na pozici mysi function insertAtCursor(myField, myValue) { //IE support if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } //MOZILLA/NETSCAPE support else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } } // calling the function //insertAtCursor(document.formName.fieldName, 'this value');



-------------------------------------------
adsmanager, textarea - výpočet a zobrazení zbývajícího počtu znaků - odpočet znaků do konce.

.../components/com_adsmanager/adsmanager.html.php
řádek cca. 1786 s javascriptem upravit funkci CaracMax následovně:

function CaracMax(texte, max) 		{
if (texte.value.length >= max) { texte.value = texte.value.substr(0, max) ; }

//pridano - pocitani poctu znaku poli + nutno zmenit udalosti onkeypress na onkeyup
pripona=texte.id; id='adsmanager_znaky_' + pripona; zbyvajici_znaky=(max - texte.value.length);
document.getElementById(id).innerHTML='zbývá: ' + zbyvajici_znaky + ' zn.'; }



v tom samém souboru změnit události na textarea onkeypress na onkeyup (jinak to chybně počítá znaky do konce a při backspace)


v tom samém souboru najít řádek cca. 1500 a upravit jej takto:

if (function_exists("checkPaidField")) 				{ 					checkPaidField($field); 				}     

//pridano if($field->type=="textarea") { echo "<span class='adsmanager_znaky' id='adsmanager_znaky_" . $name . "'>max. " . $field->maxlength . " znaků</span>";
} echo "</td></tr>";




-------------------------------------
úprava adsmanageru - nápověda, resp. hledání v seznamu kategorií:


soubor .../components/com_adsmanager/adsmanager.html.php
kolem řádku cca. 1630 do javascriptu přidat a upravit nějak takto:

 

$display_current_cat_only = 1;
adsmanager_html::selectCategories(0,"",$cats,$catid,$conf->root_allowed,""/*$link*/,$display_current_cat_only);
}
else
{
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function jumpmenu(target,obj,restore){

eval(target+".location='"+obj.options[obj.selectedIndex].value+"'");
obj.options[obj.selectedIndex].innerHTML="<?php echo ADSMANAGER_WAIT;?>";
}



//pridano //tato cast html kodu nepatri k vlastnim polim, ale k vyberu kategorii na prvni strance function searchSel(posledni_pozice) {//posledni_pozice - pro hledani dalsich vysledku var input=document.getElementById('hledej_kategorii').value.toLowerCase(); var output=document.getElementById('strom_kategorii').options; for(var i=0;i<output.length;i++) { mala_pismena=output[i].text.toLowerCase();//pridana moznost nezavislost na velikosti .text. (popisku)- .text. hleda v popisu co je videt, .value. hleda v hodnotach co se odesilaji //if(mala_pismena.indexOf(input)==0){//hleda na zacatku if(mala_pismena.indexOf(input)!=-1){//hleda i uprostred document.getElementById('button_hledej').value="další možný výsledek >>>";//hledej dalsi if(posledni_pozice<output[i].index) { output[i].selected=true; //alert('delka:'+output.length);alert('posl:'+posledni_pozice);alert('souc ind:'+output[i].index); return output[i].index;//return pridan aby to neselectovalo az posledni vyskyt } } if(output[i].index==(output.length-1)) {alert('Výsledky dosáhly konce kategorií, jestli chcete pokračovat od začátku klikněte znovu na tlačítko "další výsledky"');return 0;} } } posledni_pozice=0;


do příslušného tagu select (je jich tam víc) , přidat id="strom_kategorii"

<select id="strom_kategorii" name='category_choose' onchange="jumpmenu('parent',this)">


kolem řádku 1720 upravit kód takto: (vložit input pole + button)
(Vyhledavaci pole se zobrazuje pouze na prvni strance ne na druhé stránce a to z důvodů události onchange="jumpmenu('parent',this)" v tagu select. Kvůli onchange, které nefunguje při vyhledávání je doplněn právě button potvrdit kategorii)

else 				adsmanager_html::selectCategories(0,"",$cats,$catid,$conf->root_allowed,$link,0);  			?> 			</select>                                                                         <?php  //echo $_GET['catid'];                                                 if($_GET['catid']!=0){                            echo '<br \>!!! Změna kategorie smaže všechna již vyplněná pole !!! <br \><br \>';                             }                         else                         {                         echo '<input type="button" name="odesilaci_button_navic" value="Potvrdit kategorii" onclick="jumpmenu(\'parent\',document.getElementById(\'strom_kategorii\'));">';                                                       ?>                                                                                   <br \>                              Zadejte část slova hledaného výrazu <input type="text" id="hledej_kategorii" name="hledej_kategorii"  onfocus="posledni_pozice=0;document.getElementById('strom_kategorii')[0].selected=true;" onkeyup=" if(document.getElementById('hledej_kategorii').value.length>3){if(document.getElementById('hledej_kategorii').value!=''){posledni_pozice=searchSel(posledni_pozice);}}">  <input type="button" nama="button_hledej" id="button_hledej" onclick="if(document.getElementById('hledej_kategorii').value!=''){posledni_pozice=searchSel(posledni_pozice);}" value="? hledej kategorii ?">                                             <?php                             }                          ?>                                                                                                                       		<?php 		} 	} 	 	function displayMultipleCatsChooser($selectedcats,$cats,$conf,$option,$itemid)



------------------------
úprava sobi2 - katalog odkazů - webových stránek joomla
úprava, aby k detailu se zobrazovala seo adresa a viditelná adresa www + viditelná adresa e-mailu.

sobi2 verze 2.9.3.2 prvotní instalace (pokud vím, tak různé verze mají docela různý kód)

otevřít soubor components/com_sobi2/sobi2.entry.php
řádek cca. 340


seo webová adresa odkazu 1)

najít a zakomentovat řádek
$data = "<a href=\"{$data}\"{$noFollow} title=\"{$mySobi->title}\" target=\"_blank\">{$field->label}</a>";

nahradit:
//pridano - odstraněn i atribut "nofollow"


$data = "<a href=\"{$data}\" title=\"{$mySobi->metakey}\" target=\"_blank\">{$mySobi->title}</a>";



viditelná emailová adresa 2)
o pár řádků níže najít a zakomentovat:

// $data = sobiHTML::emailCloaking( $data, 1, $field->label, 0 );

nahradit:
$data = "<a href=\"mailto:{$data}\" title=\"{$mySobi->title}\" target=\"_blank\">{$data}</a>";
//nesystémové řešení, teoreticky by mohlo způsobovat nefunkčnost nějaké funkce, protože původně je volána funkce, která vrací nějakou hodnotu. Bohužel ani po dlouhé době se mi nepodařilo dohledat, kde se to dá upravit systémově. Možná je to ukryto v systému joomly a ne v sobi2.



přidání ještě jedné adresy v zobrazení www.neco.cz
+ přidání zobrazení image náhledu stránky

někam do souboru šablony detailu - components/com_sobi2/templates/default/sobi2.details.tmpl.php

vložit:
<a href="<?php echo $fieldsObjects['field_weburl']->data; ?>" target="_blank">  <?php echo $fieldsObjects['field_weburl']->data; ?>  </a>   <br />    <img alt="Thumbnails by Thumbshots.org" style="margin: 0px; padding: 0px; border-width: 1px;" src="http://open.thumbshots.org/image.pxf?url=<?php echo $fieldsObjects['field_weburl']->data; ?>" onload="if (this.width>100) this.border=1; this.alt='Thumbnails by Thumbshots.org';" border="1"></a>   </span>  <br />



zobrazování / nezobrazování ikony a loga
1)pokud v administraci sobi2 - nastavení vzhledu - obecné nepovolíte ikonu a logo zobrazovat v detailu, tak se Vám tam nezobrazuje - nutno zkontrolovat.
Obejit to lze ev.:

Zadáním kódu do šablony detailu components/com_sobi2/templates/default/sobi2.details.tmpl.php

tvrdým napsáním tohoto kódu:
Title     <?php echo $mySobi->title ?> Icon     <img src="/images/com_sobi2/clients/<?php echo $mySobi->icon; ?>" /> Image   <img src="/images/com_sobi2/clients/<?php echo $mySobi->image; ?>" />


zdroj: http://www.sigsiu.net/forum/community-board-for-templates-css/v-card-only-no-details-view-title-icon-image-without-links/msg53947/#msg53947

+ konfigurace a další pole
http://www.sigsiu.net/configuration_file.html

Pokud nelze nahrát obrázky, resp. logo a ikona, zkontrolujte, zda máte založen adresář images/com_sobi2/clients s právy zápisu.
Je možné ještě zkontrolovat formát nahrávaných obrázků a nastavení ftp vrstvy přímo v nastavení joomla.

----------------------------------------------
jednoduché javascriptové ověření spamu "captcha" v sobi2


1)v souboru components/com_sobi2/form.class.php
najít řádek cca. 1443 a upravit nějak takto:
$this->jsValidator .= "\n\t\t\t alert( '"._SOBI2_FORM_JS_ALL_REQUIRED_FIELDS."' );" . 										  "\n\t\t\t return false;" . 										  "\n\t\t; }


//pridano
if(form.field_overeni.value!='11'){alert( 'Vyplňte číslo deset (číslovkou)' );return false;}\n\t\t"; //konec pridani


break; case 2: // is textarea


2)v uživatelem definovaných polích vytvořte povinné textové pole s názvem field_overeni

Pozn.: zkoušeno na registračním formuláři s výchozí funkcí.




Tento článek je z ZenCart
http://www.zencart.cz

URL tohoto článku je:
http://www.zencart.cz/modules/news/article.php?storyid=81