Javascript Fehler

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Javascript Fehler

Beitrag von woddel » Mo 7. Okt 2013, 09:16

hallo!

Ich teste gerade für mich die Version 4.9

So richtig rund will das alles nicht laufen.
Der wysiwyg-editor macht zuweilen eigenartige Dinge wie z.B Text kürzen.
Das Datummodul erzeugt Fehlermeldungen.
Ich habe eine ganze Sammlung vom Javascript-Fehlern.
Ich stochere schon eine ganze Weile rum - deshalb hier mal die Frage in die Runde ob es (möglicherweise banale) Lösungsvorschläge gibt.

dankeSchönSchonMal!
Woddel

Code: Alles auswählen

[09:56:14.661] getPreventDefault() sollte nicht mehr verwendet werden. Verwenden Sie stattdessen defaultPrevented. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
--
[09:56:45.253] Das angegebene Attribut auf Attributen sollte nicht mehr verwendet werden. Es liefert immer true. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
[09:56:45.451] getPreventDefault() sollte nicht mehr verwendet werden. Verwenden Sie stattdessen defaultPrevented. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
--
[09:56:56.352] Das angegebene Attribut auf Attributen sollte nicht mehr verwendet werden. Es liefert immer true. @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:2
[09:56:59.544] TypeError: $(...).datetimepicker is not a function @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:137
--
[09:57:16.487] getPreventDefault() sollte nicht mehr verwendet werden. Verwenden Sie stattdessen defaultPrevented. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
--
[09:58:11.674] TypeError: this.getDoc(...) is null @ http://www.mydomain.com/contenido/external/wysiwyg/tinymce3/jscripts/tiny_mce/tiny_mce.js:1
[09:58:12.778] Das angegebene Attribut auf Attributen sollte nicht mehr verwendet werden. Es liefert immer true. @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:2
[09:58:16.535] getPreventDefault() sollte nicht mehr verwendet werden. Verwenden Sie stattdessen defaultPrevented. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
--
[09:59:04.422] Das angegebene Attribut auf Attributen sollte nicht mehr verwendet werden. Es liefert immer true. @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:2
[09:59:05.867] TypeError: $.widget.extend is not a function @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:239
[09:59:05.941] TypeError: $.widget.extend is not a function @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:239
[09:59:07.001] TypeError: $(...).datetimepicker is not a function @ http://www.mydomain.com/contenido/scripts/jquery/jquery.js:137
--
[09:59:21.069] getPreventDefault() sollte nicht mehr verwendet werden. Verwenden Sie stattdessen defaultPrevented. @ http://www.mydomain.com/cms/js/jquery-1.8.2.min.js:2
woddel

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Javascript Fehler

Beitrag von xmurrix » Di 8. Okt 2013, 10:01

Kannst du uns ein paar Details zur Umgebung (verwendetes Betriebssystem, Browser und Versionen davon) geben?

Habe das Datummodul "content_date" unter verschiedenen Browsern (IE 7, IE 10, Firefox 24 und Chrome 30) getestet, konnte den JavaScript-Fehler nicht reproduzieren.

Hast du etwa andere JS-Libraries oder eine andere Version von jQuery im Frontend eingebunden?

Falls du ein Update gemacht hast, solltest du den browsercache leeren. Das kann auch eine Ursache dafür sein.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 9. Okt 2013, 15:25

folgende JS-Files sind eingebunden:

Code: Alles auswählen

        <script type="text/javascript" charset="utf-8" src="js/jquery-1.8.2.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/jquery-ui-1.9.1.custom.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/main.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/jquery.validate.js"></script>
zusätzlich - nur im frontend:

Code: Alles auswählen

        <script src="js/lightbox-2.6.min.js"></script>
Was ich mache - und der Verdacht liegt natürlich nahe das es etwas damit zu tun hat:
Ich habe 10 Bilder eingebunden mit einem eigenen Modul, das die Bildcontainer in einer Schleife erzeugt.
(Der Hinweis auf diese Konstruktion war von die - danke dafür! http://forum.contenido.org/viewtopic.php?f=92&t=34430)

Der

Code: Alles auswählen

for ($bildnummer=$startbildnummer; $bildnummer<=$endbildnummer; $bildnummer++){
		$thisImgEditor = stripslashes($ocType->getGeneratedCmsTag('CMS_IMGEDITOR', $bildnummer));
		$thisImg = stripslashes($ocType->getGeneratedCmsTag("CMS_IMG", $bildnummer));
....
}	
Nachdem ich einmal

Code: Alles auswählen

TypeError: 'undefined' is not a function (evaluating '$("#search_result").link_section()')

aber 9x folgenden JS-Fehler bekomme:

Code: Alles auswählen

TypeError: 'undefined' is not a function (evaluating '$.widget.extend( {},
            this.options,
            this._getCreateOptions(),
            options )')
Liegt der Verdacht nahe, das die Wiederholung Stress macht.
Kann das an dem erwähnten header-Redirect der Klasse cContentTypeImgeditor liegen?

Ziel der ganzen Geschichte ist ein Modul mit folgenden Features:
  • • einbinden von mehreren Bildcontainern in einer Schleife
  • • Mehrmaliges Einbinden des Modules z.B. Bilder 1-3 und dann Bilder 4-10
  • • Alle Bilder können im Frontend in EINER Lightbox-Gallery angesehen werden
  • • Erzeugung von mehreren Bildgrößen (z.B.Thumbnail, ein-, Zwei-, und Dreispaltig) per PHP,
    die dann in einem Verzeichnis "scaled" neben dem Original auf den Server gespeichert werden
Für Contenido 4.8 hatte ich eben sowas schon gebaut - und das war nicht schlecht.
Ich bin halt Designer - nicht Coder. Deshalb frage ich manchmal vielleicht etwas simpel... :oops:

for ($i=0;$i<1000;$i++){
     echo "thanks!";
}
woddel

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Javascript Fehler

Beitrag von xmurrix » Mi 9. Okt 2013, 15:39

Hallo woddel,

vermutlich liegt es an der for-Schleife, in der die Bilder generiert werden.

Es sieht so aus, als ob das globale jQuery Objekt $, warum auch immer, auf einmal nicht vorhanden ist. Leider kann ich den Fehler anhand deiner Code-Beispiele nicht eingrenzen, man müsste das unter Realbedingungen im Browser debuggen.

Kannst du bei Gelegenheit dein Modul zur Verfügung stellen, so das man das reproduzieren kann oder ist es irgendwo online verfügbar?

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 9. Okt 2013, 17:17

Hallo!
Die Baustelle sieht im Moment so aus:

Input

Code: Alles auswählen

?>
<?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :    muliples bildermodul
* Author(s)   :    woddel
* Copyright   :
* Created     :    10.05.11
************************************************/

#Bildummer wählen
$bildnummerstart = "CMS_VALUE[0]";

$bildnummerende = "CMS_VALUE[1]";


$bildformat = "CMS_VALUE[2]";
$bildformate = array(
	array("___3sp","Dreispaltig"),
	array("___2sp","Zweispaltig"),
	array("___1sp","Einspaltig"),
	array("___thb","Thumbnail"),
	array("original","Originalgröße")
);

$showgallery = "CMS_VALUE[3]";

$showgallerysize = "CMS_VALUE[4]";

$bildselectstring="";

for ($i=0; $i<sizeof($bildformate); $i++){
	$thisformat = $bildformate[$i][0];
	$thisformatname = $bildformate[$i][1];
	if($thisformat!=$bildformat){
		$formatselectstring.='<option value="'.$thisformat.'">'.$thisformatname.'</option>';
	}else{
		$formatselectstring.='<option value="'.$thisformat.'" selected="selected">'.$thisformatname.'</option>';
		$bildformatname=$thisformatname;
	}
}

if($showgallery == "als Bild mit Link" ){
	$gallerycheck2 = "checked='checked'";
}else{
	$gallerycheck1 = "checked='checked'";
}

if($showgallerysize == "original" ){
	$gallerysizecheck1 = "checked='checked'";
	$showgallerysizeoutput = "Originalgröße";
	$showgallerysize = "";
}
if($showgallerysize == "___2sp" ){
	$gallerysizecheck2 = "checked='checked'";
	$showgallerysizeoutput = "Zweispaltig";
	$showgallerysize = "___2sp";
}
if($showgallerysize == "___3sp" ){
	$gallerysizecheck3 = "checked='checked'";
	$showgallerysizeoutput = "Dreispaltig";
	$showgallerysize = "___3sp";
}



echo'
<table cellspacing="0"  cellpadding="4" width="100%">
 <tr>
        <td class="text"  valign="top">
            <b>von Bildnummer:</b><br>
        </td>
        <td  valign="top">
            neu eingeben:
        </td>
    </tr>


    <tr>
        <td class="text" style="color: silver;">
              <b>'.$bildnummerstart.'</b>
        </td>
        <td >
            <input name="CMS_VAR[0]" type="text" size="2" maxlength="2" value="'.$bildnummerstart.'"><br>
        </td>
    </tr>


    <tr>
        <td class="text"  valign="top">
            <b>Bis Bildnummer:</b><br>
        </td>
        <td  valign="top">
            neu eingeben:
        </td>
    </tr>


    <tr>
        <td class="text" style="color: silver;">
              <b>'.$bildnummerende.'</b>
        </td>
        <td >
            <input name="CMS_VAR[1]" type="text" size="2" maxlength="2" value="'.$bildnummerende.'"><br>
        </td>
    </tr>


     <tr>
        <td class="text" colspan="2">
            <hr>
        </td>
    </tr>

    <tr>
        <td class="text" valign="top">
            <b>Bildgröße:</b><br>
                   </td>
        <td  valign="top">
            Auswahl:<br>
                  </td>
    </tr>


    <tr>
        <td class="text" valign="top"  style="color: silver;">
              <b>'.$bildformatname.'</b><br>
              ( <i>Bildname</i>'.$bildformat.'.jpg )


        </td>
        <td  valign="top">
            <select name="CMS_VAR[2]">'.$formatselectstring.'</select>
        </td>
    </tr>

          <tr>
        <td class="text" colspan="2">
            <hr>
        </td>
    </tr>


    <tr>
        <td class="text">
            <b>Bildgröße für die <br>Lightbox Gallery: </b><br>
        </td>
        <td >
            Auswahl:
        </td>
    </tr>

    <tr>
        <td class="text"  style="color: silver;">
              <b>'.$showgallerysizeoutput.'</b><br>
              ( <i>Bildname</i>'.$showgallerysize.'.jpg )</b>
        </td>
        <td >
            <input type="radio" name="CMS_VAR[4]" '.$gallerysizecheck1.'value="original"> Originalgröße<br>
            <input type="radio" name="CMS_VAR[4]" '.$gallerysizecheck2.'value="___2sp"> Zweispaltig<br>
            <input type="radio" name="CMS_VAR[4]" '.$gallerysizecheck3.'value="___3sp"> Dreispaltig<br>


        </td>
    </tr>
<tr>
        <td class="text" colspan="2">
            <hr>
        </td>
    </tr>

    <tr>
        <td class="text">
            <b>Bild zeigen:</b><br>
        </td>
        <td >
            Auswahl:
        </td>
    </tr>

    <tr>
        <td class="text"  style="color: silver;">
              <b>'."CMS_VALUE[3]".'</b>
        </td>
        <td >
            <input type="radio" name="CMS_VAR[3]" '.$gallerycheck1.'value="in Lightbox Gallery"> in Lightbox Gallery<br>
            <input type="radio" name="CMS_VAR[3]" '.$gallerycheck2.'value="als Bild mit Link"> als Bild mit Link<br>

        </td>
    </tr>



</table>';
output:

Code: Alles auswählen

<?php

// ############################# Parameter

// Maximalausmaße dreispaltiges Bild
$max_3sp_width = 1024;
$max_3sp_height = 1024;

// Maximalausmaße zweispaltiges Bild
$max_2sp_width = 728;
$max_2sp_height = 728;

// Maximalausmaße einspaltiges Bild
$max_1sp_width = 216;
$max_1sp_height = 216;

// Maximalausmaße Tumbnail
$max_thb_width = 100;
$max_thb_height = 100;

// ############################# Pfade

$html_pfad = $cfgClient[$client]["path"]["htmlpath"];
$myserver = "http://".$_SERVER['HTTP_HOST'];

// ############################# Konfigurationsvariablen

$startbildnummer   = "CMS_VALUE[0]";
$endbildnummer     = "CMS_VALUE[1]";
$mybildformat      = "CMS_VALUE[2]";
$myshowgallery     = "CMS_VALUE[3]";
$myshowgallerysize = "CMS_VALUE[4]";

if ($mybildformat=="original"){
	$mybildformat ="";
}

if ($myshowgallerysize=="original"){
	$myshowgallerysize ="";
}

// #############################  Funktion zum Bild umrechnen

if (!function_exists('ReSizeMyPic')){
	function ReSizeMyPic($mypic, $myformat, $mypath, $mynr, $myext, $mywidth, $myheight){
		$html_pfad = $cfgClient[$client]["path"]["htmlpath"];

		$imagefile =  $mypath."".$mypic.".".$myext;

		$imagesize = getimagesize($imagefile);
		$imagewidth = $imagesize[0];
		$imageheight = $imagesize[1];
		$imagetype = $imagesize[2];
		$newpicpath = str_replace($myserver, "",$mypath);

		switch ($imagetype){
			// Bedeutung von $imagetype:
			// 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM
		case 1: // GIF
			$image = imagecreatefromgif($imagefile);
			break;
		case 2: // JPEG
			$image = imagecreatefromjpeg($imagefile);
			break;
		case 3: // PNG
			$image = imagecreatefrompng($imagefile);
			break;
		default:
			echo $imagefile.": Unsupported imageformat, only .jpg here!<br>";
		}

		// Verzeichnis für die skalierten Bilder erzeugen
		if ( !is_dir($newpicpath."scaled") ) {
			mkdir($newpicpath."scaled", 0777);
		}

		$picfile = "".$newpicpath."scaled/".$mypic.$myformat.".".$myext;

		if(!file_exists( $picfile )){

			// Ausmaße kopieren, wir gehen zuerst davon aus, dass das Bild schon picnailgröße hat
			$picwidth  = $imagewidth;
			$picheight = $imageheight;

			// Breite skalieren falls nötig
			if ($picwidth > $mywidth)
			{
				$factor = $mywidth / $picwidth;
				$picwidth  *= $factor;
				$picheight *= $factor;
			}

			/*
				// Höhe skalieren, falls nötig
				if ($picheight > $max_3sp_height)
				{
					$factor = $max_3sp_height / $picheight;
					$picwidth  *= $factor;
					$picheight *= $factor;
				}
*/
			// pic erstellen
			$pic = imagecreatetruecolor($picwidth, $picheight);

			imagecopyresampled(
				$pic,
				$image,
				0, 0, 0, 0, // Startposition des Ausschnittes
				$picwidth, $picheight,
				$imagewidth, $imageheight
			);

			// In Datei speichern
			imagejpeg($pic, $picfile, 90);
			chmod( $picfile , 0777 );
			imagedestroy($pic);
		}

	}

}
// ############################# Ausgabe

$output = "";
$ocType = new cTypeGenerator();
$imagename = "";
$picScaleList = array();

for ($bildnummer=$startbildnummer; $bildnummer<=$endbildnummer; $bildnummer++){

	$thisImgEditor = stripslashes($ocType->getGeneratedCmsTag('CMS_IMGEDITOR', $bildnummer));
	$thisImg = stripslashes($ocType->getGeneratedCmsTag("CMS_IMG", $bildnummer));

	if($edit){
		$output.=  "<div class='content_type_label'>";
		$output.=   "Bild ".$bildnummer."";
		$output.=  "</div>";
		$output.=   $thisImgEditor;
	}

	$imagenamearr = explode("/",$thisImg);
	$imagename = array_pop( $imagenamearr );
	$imagenamearr2 = explode(".",$imagename);
	$imageendung = array_pop( $imagenamearr2 );
	$imagename = implode(".",$imagenamearr2);
	$imagepath = implode("/",$imagenamearr);
	$newpicpath = str_replace($html_pfad, "",$imagepath."/");

	// ############################# Bildnamen strippen
	$imagename = str_replace("___3sp", "", $imagename);
	$imagename = str_replace("___2sp", "", $imagename);
	$imagename = str_replace("___1sp", "", $imagename);
	$imagename = str_replace("___thb", "", $imagename);

	if( $edit ) {

		// ############################# Array aller Bilder zur Bearbeitung

		if ($imagename != ""){
			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___3sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_3sp_width,
				'myheight'     => $max_3sp_height
			);
			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___2sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_2sp_width,
				'myheight'     => $max_2sp_height
			);

			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___1sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_1sp_width,
				'myheight'     => $max_1sp_height
			);

			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___thb",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_thb_width,
				'myheight'     => $max_thb_height
			);

		}

		// anzeigegröße fürs backend
		if ($imagename != ""){

			if ($mybildformat== "___3sp"){
				$displaywidth = $max_3sp_width;
			}
			if ($mybildformat== "___2sp"){
				$displaywidth = $max_2sp_width;
			}
			if ($mybildformat== "___1sp"){
				$displaywidth = $max_1sp_width;
			}
			if ($mybildformat== "___thb"){
				$displaywidth = $max_thb_width;
			}

			//$output.=  "<img src='".$newpicpath."scaled/".$imagename.$mybildformat.".".$imageendung."' alt='Bild ".$bildnummer."'><br>";
			// originalbild ausgeben um im Backend nicht auf die Skalierung warten zu müssen
			$output.=  "<img src='".$newpicpath.$imagename.".".$imageendung."' alt='Bild ".$bildnummer."' width='$displaywidth'><br>";
		}

	}else{
		if ($imagename != ""){
			$output.=  "<a href='".$newpicpath."scaled/".$imagename."___3sp".".".$imageendung."' data-lightbox='projekt'><img src='".$newpicpath."scaled/".$imagename.$mybildformat.".".$imageendung."' alt='Bild ".$bildnummer."'></a><br>";
		}
	}
}

echo $output;


//Alle Bilder im Array in die definierten Formate skalieren
if( $edit ) {
	for ($i=0;$i<count($picScaleList);$i++){
		ReSizeMyPic($picScaleList[$i]['mypic'], $picScaleList[$i]['mybildformat'], $picScaleList[$i]['imagepath'], $picScaleList[$i]['mypicnr'], $picScaleList[$i]['mypicext'], $picScaleList[$i]['mywidth'], $picScaleList[$i]['myheight']);

	}
}
// #############################


?>
Wie gesagt - ich bin nicht der Coderkönig - geht bestimmt noch schlanker

Das schöne an dem Modul ist, das ganz unbedarfte trotzdem ihre Artikel mit vernünftig formatierten Bildern ausstatten können.
Andere Module können dann auch z.B. Artikel mit den schon vorhandenen Thumbnails listen.

Gruß
Woddel
woddel

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Javascript Fehler

Beitrag von xmurrix » Mi 9. Okt 2013, 17:39

Hallo woddel,

dein Code sieht doch gut aus. Bei mir hat es auch nicht bis zum Coderkönig gereicht, schlage mich als Coderritter so durchs Leben :-)

Ändere mal den JavaScript-Code im Template contenido/templates/standard/template.cms_abstract_tabbed_edit_bottom.html in

Code: Alles auswählen

<script type="text/javascript">
    //<![CDATA[
    conLoadFile('{PATH_BACKEND}scripts/content_types/cmsAbstractTabbed.js', function() {
        conLoadFile('{JS_CLASS_SCRIPT}', function() {
            var contentTypeInstance = new {JS_CLASS_NAME}(
                '#cms_{PREFIX}_{ID}_settings',
                '#cms_{PREFIX}_{ID}',
                '{PATH_BACKEND}',
                '{PATH_FRONTEND}',
                '{IDARTLANG}',
                '{ID}',
                Array({FIELDS}),
                '{PREFIX}',
                '{CONTENIDO}',
                {SETTINGS}
            );
            contentTypeInstance.initialise();
        });
    });
    //]]>
</script>
Durch die mehrfache Verwendung des Content-Types hintereinander kommt es wohl zu Problemen, beim Interpretieren des JavaScript-Codes mittels eval().

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 9. Okt 2013, 18:06

Hmmm. jetzt bekomme ich andere Meldungen

Code: Alles auswählen

TypeError: 'undefined' is not a function (evaluating '$("#search_result").link_section()')
projekt.js:33TypeError: 'undefined' is not a function (evaluating '$("#cookie_note").dialog')
woddel

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Javascript Fehler

Beitrag von xmurrix » Mi 9. Okt 2013, 18:14

Woher kommt dieses "projekt.js"?

Es hängt vielleicht mit dem Layout zusammen, oder mit dem Script

Code: Alles auswählen

<script src="js/lightbox-2.6.min.js"></script>
Was passiert, wenn du die lightbox-2.6.min.js aus dem layout rausnimmst?

Nachtrag:
Im Beispielmandanten gibt es eine main.js unter cms/js/, darin sind JavaScript-Funktionen enthalten, die von bestimmten Dom-Nodes abhängig sind.
Wenn du kein HTML-Element mit der id "search_result" in deinem Layout hast, wird die verwendete main.js wohl einen JavaScript-Fehler verursachen.

Der JavaScript-Code "$("#cookie_note").dialog" kommt vom Modul "script_cookie_directive" und dieser erwartet ein HTML-Element mit der id "cookie_note" im Layout.

Ist etwa deine projekt.js die Umbenannte Version des main.js aus dem Beispielmandanten?

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 30. Okt 2013, 12:08

xmurrix hat geschrieben:Woher kommt dieses "projekt.js"?

Nachtrag:
Im Beispielmandanten gibt es eine main.js unter cms/js/, darin sind JavaScript-Funktionen enthalten, die von bestimmten Dom-Nodes abhängig sind.
Wenn du kein HTML-Element mit der id "search_result" in deinem Layout hast, wird die verwendete main.js wohl einen JavaScript-Fehler verursachen.

Der JavaScript-Code "$("#cookie_note").dialog" kommt vom Modul "script_cookie_directive" und dieser erwartet ein HTML-Element mit der id "cookie_note" im Layout.
Hallo!

Nach längerem brachliegen dieser Baustelle und jetzt hoffnungsvoller Neuinstallation von 4.9.2 statt 4.9.0 (ohne eigene JavaScripts) verzweifle ich langsam an der Geschichte.

Momentan scheinen mir zwei Probleme aufzutreten

1. Es gibt wohl Javascripts, die gewisse Html-Elemente voraussetzen. Das ist sperrig wenn man ein eigenes Layout umsetzen möchte.
Wenn ich z.B. kein Suchfeld im Layout möchte muss ich offensichtlich auch in der main.js eingreifen.
Das wünschte ich mir modularer. Die Modularität ist in meinen Augen eigentlich eine der Stärken von Contenido.

2. Die Wiederholung des CMS_IMGEDITOR erzeugt Javascript-Fehler. Vermutlich als Folge dessen
- funktionieren die Image-Buttons im Backend unzuverlässig.
- fliege ich in 90% der Fälle wieder raus beim Versuch ein Verzeichnis auszuwählen wenn der neue Image-Browser aufgeht.
Ist es nicht vorgesehen mehrfach den CMS_IMGEDITOR in einem Artikel einzusetzen?
das ändern der template.cms_abstract_tabbed_edit_bottom.html brachte leider nur eine Veränderung der Fehler, aber keine Lösung...

Eigentlich hatte ich mich recht über die neue Version gefreut, bin jetzt aber kurz davor wieder 4.8 einzusetzen.
Möglicherweise habe ich aber auch einfach irgendwas nicht recht verstanden...noch bin ich für Tips zu haben.


Schöne Grüße
Woddel
woddel

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Javascript Fehler

Beitrag von homtata » Mi 30. Okt 2013, 12:31

ich kann nicht wirklich zur echten Lösung beitragen, höchstens zur Abgrenzung:
Ist es nicht vorgesehen mehrfach den CMS_IMGEDITOR in einem Artikel einzusetzen?
Ich habe in einer 4.9.0 mehrere Module mit je mehreren CMS_IMGEDITOR-Aufrufen drin, so dass in manchen Artikeln bis zu 3x2 Aufrufe drin sind, die ohne Probleme funktionieren. Mein Layout ist allerdings auch WEIT weg vom Demomandanten und hat die main.js auch nicht drin.

Treten die Handlingprobleme denn in allen Browsern auf? Hast du mal testweise alle JS-includes rausgeworfen und dann nach und nach wieder rein, um mal zu testen, ob es eine konkrete Datei ist, die das Problem verursacht? Stimmen die Mehrfachaufrufe des CMS_IMGEDITOR im Modul selbst auch wirklich oder gibts da evtl. ungewollte Interaktionen?

LG

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Javascript Fehler

Beitrag von xmurrix » Mi 30. Okt 2013, 12:53

Hallo woddel,

öffne doch deine projekt.js und ändere die JavaScript Zeile:

Code: Alles auswählen

$("#search_result").link_section();
in

Code: Alles auswählen

if ($("#search_result")[0]) {
    $("#search_result").link_section();
}
oder du entfernst die Zeile.

Öffne die {mandantenordner}/data/modules/script_cookie_directive/js/script_cookie_directive.js und füge vor der Zeile

Code: Alles auswählen

    $("#cookie_note").dialog({
folgendes ein

Code: Alles auswählen

    if (!$("#cookie_note")[0]) {
        return;
    }

    $("#cookie_note").dialog({
Oder du entfernst das Modul "script_cookie_directive" aus deinen Layouts, da es ein Element mit der Id "cookie_note" erwartet.

Beides sorgt dafür, dass deine JavaScript-Fehler nicht mehr erscheinen.

... Es gibt wohl Javascripts, die gewisse Html-Elemente voraussetzen. Das ist sperrig wenn man ein eigenes Layout umsetzen möchte...
Der Demomandant und die Beispielinhalte (Module, Templates) sind aufeinander abgestimmt, da gibt es nun mal Abhängigkeiten untereinander. Manches lässt sich bestimmt besser lösen, aber man sollte schon einen Blick in die JavaScript-Datei und in die CSS-Datei werfen, wenn man HTML-Elemente aus dem Layout des Beispielmandanten entfernt.
...Das wünschte ich mir modularer. Die Modularität ist in meinen Augen eigentlich eine der Stärken von Contenido...
Da gebe ich dir recht und wenn ihr euer Feedback dazu gibt, so wie du das hier gemacht hast, können wir davon ausgehen, dass es besser werden kann.
Man darf nicht vergessen, dass die 4.9 im Vergleicht zur 4.8 erheblich überarbeitet wurde, da kann es leider vorkommen, dass nicht alles perfekt ist.
...Eigentlich hatte ich mich recht über die neue Version gefreut, bin jetzt aber kurz davor wieder 4.8 einzusetzen....
Was können wir tun, um dich davon zu überzeugen, bei der 4.9 zu bleiben?

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 30. Okt 2013, 13:11

homtata hat geschrieben:ich kann nicht wirklich zur echten Lösung beitragen, höchstens zur Abgrenzung:
Ist es nicht vorgesehen mehrfach den CMS_IMGEDITOR in einem Artikel einzusetzen?
Ich habe in einer 4.9.0 mehrere Module mit je mehreren CMS_IMGEDITOR-Aufrufen drin, so dass in manchen Artikeln bis zu 3x2 Aufrufe drin sind, die ohne Probleme funktionieren. Mein Layout ist allerdings auch WEIT weg vom Demomandanten und hat die main.js auch nicht drin.

Treten die Handlingprobleme denn in allen Browsern auf? Hast du mal testweise alle JS-includes rausgeworfen und dann nach und nach wieder rein, um mal zu testen, ob es eine konkrete Datei ist, die das Problem verursacht? Stimmen die Mehrfachaufrufe des CMS_IMGEDITOR im Modul selbst auch wirklich oder gibts da evtl. ungewollte Interaktionen?

LG

Hallo !

Danke für das Feedback!

Ich habe wie weiter oben beschrieben ein Modul das in einer for-schleife einen Satz Bildermodule erzeugt.
Die werden in eine Variable geschrieben und nach der Schleife per Echo ausgegeben.
Ist da eventuell ein Haken?
Muss ich das einzeln rausschreiben damit sich das nicht timing-mässig verhakelt?

Die Probleme treten im Safari und Firefox (Mac) auf. Wenn's in beiden nicht geht, gehe ich eher von einem Nicht-Browser-Problem aus
woddel

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 30. Okt 2013, 18:24

Hallo!

Es scheint mein Bilder-Skalieren zu sein, das dazu führt, das javascripts auf Dinge zugreifen wollen, die noch nicht da sind weil das php noch nicht fertig ist oder so ähnlich. Kommentiere ich die Skalierung aus bekomme ich vorerst keine Fehler mehr.
Dabei hatte ich extra die Skalierung mit PHP NACH den Output gestellt - eben aus diesem Grund.
Skaliert wird nur im Backend beim einsetzen der Bilder - das frontend pflückt sich dann die vorbereitete richtige Größe.

Soo - Quizfrage - wie entzerre ich das?
  • :?: Auslagern der Skalierfunktion - dann muss ich eventuell viele Parameter übergeben (?)
  • :?: Oder ein zeitversetzter Aufruf der Skalierung analog einem setTimeout in JS.
Wenn das geht, bleib ich bei 4.9 ;-)

:idea: Draufgekommen bin ich übrigens, als ich gleich nach dem Neuladen des Artikels im Backend gescrollt habe und es mir beim Scrollen noch mehr Fehler rausgehauen hat.
woddel

woddel
Beiträge: 89
Registriert: Mi 2. Jun 2004, 10:49
Kontaktdaten:

Re: Javascript Fehler

Beitrag von woddel » Mi 30. Okt 2013, 18:33

Hallo!

Jetzt scheint es zu gehen - ich teste heute Abend nochmal...

Ich habe die Skalierung in eine eigene Funktion gepackt - das entzerrt wohl schon..

Vorerst schönen Dank an alle Beteiligten

Code: Alles auswählen

<?php

// ############################# Parameter

// Maximalausmaße dreispaltiges Bild
$max_3sp_width = 1024;
$max_3sp_height = 1024;

// Maximalausmaße zweispaltiges Bild
$max_2sp_width = 728;
$max_2sp_height = 728;

// Maximalausmaße einspaltiges Bild
$max_1sp_width = 216;
$max_1sp_height = 216;

// Maximalausmaße Tumbnail
$max_thb_width = 100;
$max_thb_height = 100;

// ############################# Pfade

$html_pfad = $cfgClient[$client]["path"]["htmlpath"];
$myserver = "http://".$_SERVER['HTTP_HOST'];

// ############################# Konfigurationsvariablen

unset($startbildnummer);
unset($endbildnummer);
unset($mybildformat);
unset($myshowgallery);
unset($myshowgallerysize);

$startbildnummer   = "CMS_VALUE[0]";
$endbildnummer     = "CMS_VALUE[1]";
$mybildformat      = "CMS_VALUE[2]";
$myshowgallery     = "CMS_VALUE[3]";
$myshowgallerysize = "CMS_VALUE[4]";

if ($mybildformat=="original"){
	$mybildformat ="";
}

if ($myshowgallerysize=="original"){
	$myshowgallerysize ="";
}

// #############################  Funktion zum Bild umrechnen

if (!function_exists('ReSizeMyPic')){
	function ReSizeMyPic($mypic, $myformat, $mypath, $mynr, $myext, $mywidth, $myheight){
		$html_pfad = $cfgClient[$client]["path"]["htmlpath"];

		$imagefile =  $mypath."".$mypic.".".$myext;

		$imagesize = getimagesize($imagefile);
		$imagewidth = $imagesize[0];
		$imageheight = $imagesize[1];
		$imagetype = $imagesize[2];
		$newpicpath = str_replace($myserver, "",$mypath);

		switch ($imagetype){
			// Bedeutung von $imagetype:
			// 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM
		case 1: // GIF
			$image = imagecreatefromgif($imagefile);
			break;
		case 2: // JPEG
			$image = imagecreatefromjpeg($imagefile);
			break;
		case 3: // PNG
			$image = imagecreatefrompng($imagefile);
			break;
		default:
			echo $imagefile.": Unsupported imageformat, only .jpg here!<br>";
		}

		// Verzeichnis für die skalierten Bilder erzeugen
		if ( !is_dir($newpicpath."scaled") ) {
			mkdir($newpicpath."scaled", 0777);
		}

		$picfile = "".$newpicpath."scaled/".$mypic.$myformat.".".$myext;

		if(!file_exists( $picfile )){

			// Ausmaße kopieren, wir gehen zuerst davon aus, dass das Bild schon picnailgröße hat
			$picwidth  = $imagewidth;
			$picheight = $imageheight;

			// Breite skalieren falls nötig
			if ($picwidth > $mywidth)
			{
				$factor = $mywidth / $picwidth;
				$picwidth  *= $factor;
				$picheight *= $factor;
			}

			/*
				// Höhe skalieren, falls nötig
				if ($picheight > $max_3sp_height)
				{
					$factor = $max_3sp_height / $picheight;
					$picwidth  *= $factor;
					$picheight *= $factor;
				}
*/
			// pic erstellen
			$pic = imagecreatetruecolor($picwidth, $picheight);

			imagecopyresampled(
				$pic,
				$image,
				0, 0, 0, 0, // Startposition des Ausschnittes
				$picwidth, $picheight,
				$imagewidth, $imageheight
			);

			// In Datei speichern
			imagejpeg($pic, $picfile, 90);
			chmod( $picfile , 0777 );
			imagedestroy($pic);
		}

	}

}
// ############################# Ausgabe

echo "Bilder von ".$startbildnummer." bis ". $endbildnummer."<br>";

$bildnummer = 0;

for ($bildnummer=$startbildnummer; $bildnummer<=$endbildnummer; $bildnummer++){
	unset($ocType);
	unset($imagename);
	unset($picScaleList);
	unset($thisImgEditor);
	unset($thisImg);
	unset($output);
	echo "Bilder von ".$startbildnummer." bis ". $endbildnummer."<br>";

	$ocType = new cTypeGenerator();
	$imagename = "";
	$picScaleList = array();
	$output = "";


	$thisImgEditor = stripslashes($ocType->getGeneratedCmsTag('CMS_IMGEDITOR', $bildnummer));
	$thisImg = stripslashes($ocType->getGeneratedCmsTag("CMS_IMG", $bildnummer));

	if($edit){
		$output.=  "<div class='content_type_label'>";
		$output.=   "Bild ".$bildnummer."";
		$output.=  "</div>";
		$output.=   $thisImgEditor;
	}

	$imagenamearr = explode("/",$thisImg);
	$imagename = array_pop( $imagenamearr );
	$imagenamearr2 = explode(".",$imagename);
	$imageendung = array_pop( $imagenamearr2 );
	$imagename = implode(".",$imagenamearr2);
	$imagepath = implode("/",$imagenamearr);
	$newpicpath = str_replace($html_pfad, "",$imagepath."/");

	// ############################# Bildnamen strippen
	$imagename = str_replace("___3sp", "", $imagename);
	$imagename = str_replace("___2sp", "", $imagename);
	$imagename = str_replace("___1sp", "", $imagename);
	$imagename = str_replace("___thb", "", $imagename);

	if( $edit ) {

		// ############################# Array aller Bilder zur Bearbeitung

		if ($imagename != ""){
			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___3sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_3sp_width,
				'myheight'     => $max_3sp_height
			);
			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___2sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_2sp_width,
				'myheight'     => $max_2sp_height
			);

			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___1sp",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_1sp_width,
				'myheight'     => $max_1sp_height
			);

			$picScaleList[]   = array(
				'mypic'        => $imagename,
				'mybildformat' => "___thb",
				'imagepath'    => $newpicpath,
				'mypicnr'      => $bildnummer,
				'mypicext'     => $imageendung,
				'mywidth'      => $max_thb_width,
				'myheight'     => $max_thb_height
			);

		}

		// anzeigegröße fürs backend
		if ($imagename != ""){

			if ($mybildformat== "___3sp"){
				$displaywidth = $max_3sp_width;
			}
			if ($mybildformat== "___2sp"){
				$displaywidth = $max_2sp_width;
			}
			if ($mybildformat== "___1sp"){
				$displaywidth = $max_1sp_width;
			}
			if ($mybildformat== "___thb"){
				$displaywidth = $max_thb_width;
			}

			//$output.=  "<img src='".$newpicpath."scaled/".$imagename.$mybildformat.".".$imageendung."' alt='Bild ".$bildnummer."'><br>";
			// originalbild ausgeben um im Backend nicht auf die Skalierung warten zu müssen
			$output.=  "<img src='".$newpicpath.$imagename.".".$imageendung."' alt='Bild ".$bildnummer."'  id='Bild ".$bildnummer."' width='$displaywidth'><br>";
		}

	}else{
		if ($imagename != ""){
			$output.=  "<a href='".$newpicpath."scaled/".$imagename."___3sp".".".$imageendung."' data-lightbox='projekt'><img src='".$newpicpath."scaled/".$imagename.$mybildformat.".".$imageendung."' alt='Bild ".$bildnummer."' id='Bild ".$bildnummer."'></a><br>";
		}
	}
	echo $output;
}

// #############################

if (!function_exists('scalepix')){
	function scalePix($mypiclist){
		//Alle Bilder im Array in die definierten Formate skalieren
		if( $edit ) {
			for ($i=0;$i<count($mypiclist);$i++){
				ReSizeMyPic($mypiclist[$i]['mypic'], $mypiclist[$i]['mybildformat'], $mypiclist[$i]['imagepath'], $mypiclist[$i]['mypicnr'], $mypiclist[$i]['mypicext'], $mypiclist[$i]['mywidth'], $mypiclist[$i]['myheight']);

			}
		}
	}}
// #############################
scalepix($picScaleList);

?>
woddel

Antworten