Druckmodul auf Basis von Artikel einfügen (rechts)

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Druckmodul auf Basis von Artikel einfügen (rechts)

Beitrag von schlaucher » Mo 20. Nov 2006, 20:04

Habe mal ein Druckmodul erstellt, welches auf Basis des Moduls Artikel einfügen (rechts) einen Artikel zur Druckvorschau in einem neuen Browserfenster anzeigt.
Dabei wird zusätzlich ein frei erstellbarer Druckkopf angezeigt und mit ausgedruckt (z.B. Logo und Anschrift).

Dazu benötigt man:

1.) ein eigenes Layout (drucken)

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
   <title>Meine Domain</title>
   <link rel="stylesheet" media="screen" type="text/css" href="css/anzeige.css">
   <link rel="stylesheet" media="print" type="text/css" href="css/drucken.css">
</head>

<body>
    
   <div id="content">
   CMS_CONTAINER[1]
   CMS_CONTAINER[2]
   </div>
    
</body>
</html>
2.) Modul Artikel drucken

Code: Alles auswählen

<?php
/***********************************************
* Article Include Output for Printing
*
* Author      :     Willi Man
* Copyright   :     Contenido - four for business
* Created     :     18-12-2003
* Modified    :     02-01-2004
* Modified    :     05-08-2005, Andreas Lindner
* Modified    :     20-11-2006, schlaucher
************************************************/

#Get current settings
//$cms_idcat = "CMS_VALUE[1]";
//$cms_idcatart = "CMS_VALUE[2]";

$bDebug = false;
if ($bDebug) echo "<pre> cat $cms_idcat catart $cms_idcatart</pre>";

if ((strlen($cms_idcat) > 0 AND $cms_idcat != '0') AND (strlen($cms_idcatart) > 0 AND $cms_idcatart != '0')) {
	if (strlen($cms_idcatart) > 0 AND $cms_idcatart > 0) {		
		#Get idart from database
		$sql = "SELECT idcat, idart
				FROM ".$cfg["tab"]["cat_art"]."
				WHERE idcatart='".$cms_idcatart."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    	$db->query($sql);
    	$db->next_record();

    	$cms_catid = $db->f("idcat");
    	$cms_artid = $db->f("idart");
    	
   		$db->free();		
	}
	
	if ($cms_idcatart == 0) {
		$cms_catid = $cms_idcat;
				
		$sql = "SELECT A.idart, B.lastmodified
				FROM ".$cfg["tab"]["cat_art"]." AS A, ".$cfg["tab"]["art_lang"]." AS B
				WHERE
					A.idart = B.idart AND
					B.online = 1 AND
					A.idcat = '".$cms_idcat."'
					ORDER BY B.lastmodified DESC";
					
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    	$db->query($sql);
    	
    	if ($db->next_record()) {
    		$cms_artid = $db->f("idart");
    		$lastmod = $db->f('lastmodified');
    	}
    	
   		$db->free();
   		
		$sql = "SELECT idcatart
				FROM ".$cfg["tab"]["cat_art"]."
				WHERE
					idart = '".$cms_artid."' AND
					idcat = '".$cms_catid."' ";
					
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    	$db->query($sql);
    	
    	if ($db->next_record()) {
    		$cms_idcatart = $db->f("idcatart");
    	}
    	
   		$db->free();   		
	}	
	
    #Check if category is online or protected
    $sql = "SELECT public, visible FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='".$cms_catid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $public = $db->f("public");
    $visible = $db->f("visible");
    	
    $db->free();

    #Check if article is online
    $sql = "SELECT online FROM ".$cfg["tab"]["art_lang"]." WHERE idart='".$cms_artid."' AND idlang='".$lang."'";
	if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
    $db->query($sql);
    $db->next_record();

    $online = $db->f("online");
    	
    $db->free();

    #If the article is online and the according category is not protected and visible, include the article

    if ($public == 1 AND $visible == 1 AND  $online == 1) {
		#Check if code creation is necessary
    	$sql = "SELECT
                createcode
            FROM
                ".$cfg["tab"]["cat_art"]."
            WHERE
                idcat = '".$cms_catid."' AND
                idart = '".$cms_artid."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}
		$db->query($sql);
		if ($db->next_record()) {
			$createcode = $db->f("createcode");
		} else {
			$createcode = 1;
		}
	
		$db->free();
		
		#Create code if necessary
		if ($createcode == 1) {
			cInclude('includes', 'functions.con.php');
			cInclude('includes', 'functions.tpl.php');
			cInclude('includes', 'functions.mod.php');
			
        	conGenerateCode($cms_catid, $cms_artid, $lang, $client);
		}
		
		#Get code from database and execute it
		$sql = "SELECT code FROM ".$cfg["tab"]["code"]." WHERE idcatart = '".$cms_idcatart."' AND idlang = '".$lang."'";
		if ($bDebug) {echo "<pre>";print_r($sql);echo "</pre>";}

		$db->query($sql);
		if ($db->next_record()) {
			$code = stripslashes($db->f("code"));
			
			$db->free();
			
			ob_start();
		
			eval("?>
".$code."
<?php
");
	
			$code = ob_get_contents();
	
			#Clean buffer
			ob_end_clean();
	
			$startpos = strpos($code, "<!--start:content-->");
			$endpos = strpos($code, "<!--end:content-->");
			$difflen = $endpos - $startpos;
		
			$code = substr($code, $startpos, $difflen);	
            echo '<div id="print_button"><button class="button_print" onclick="self.print();">Drucken</button>&nbsp;&nbsp;&nbsp;&nbsp;<button class="button_print" onclick="self.close();">Schließen</button></div><hr>';
			echo $code;
		} else {
			echo "<!-- ERROR in module Article Include<pre>no code created for article to include!<br>idcat $cms_catid, idart $cms_artid, idlang $lang, idclient $client</pre>-->";
		}
    }
}

?>
CSS anzeige

Code: Alles auswählen

#print_button 
 {
 width:459px;
 text-align:right;
 left:0px;
 top:0px;
 }

#button{
margin-bottom:5px;}

.button_print 
 {
 cursor: pointer;
 border: #000000;
 border-style: solid;
 border-top-width: 1px;
 border-right-width: 1px;
 border-bottom-width: 1px;
 border-left-width: 1px;
 background-color: #ffffff;font-family:verdana,tahoma,arial, sans-serif;
 font-size:10px;
 font-weight: normal;
 text-decoration:none;
 }


CSS drucken

Code: Alles auswählen

#print_button 
 {
 display:none;
 }

#button
 {
 display:none;
 }
Die CSS sind nur für die Buttons, damit diese nicht mitgedruckt werden. Alle anderen CSS Parameter bleiben natürlich Euch überlassen.

3.) ein Template Druckvorschau

Name: Druckvorschau
Layout: drucken
Conatiner 1: Text (HTML)
Container 2: Artikel drucken

Nun erstellt man einen Druckvorschau Artikel auf Basis des Template Druckvorschau und definiert seinen Druckkopf. Der Artikel muss nicht über ein Menü ausrufbar sein. (Ich habe für solche Artikel einen Service Bereich)

Im Layout der Standardartikel, welche ausgedruckt werden sollen, müssen nun wie beim Artikel rechts auch, der Start und End Bereich definiert werden.

Beispiel:

Code: Alles auswählen

  <div id="contentcenter">
   <!-- Content -->
   <!--start:content-->
   CMS_CONTAINER[40]
   CMS_CONTAINER[41]
   CMS_CONTAINER[42]
   CMS_CONTAINER[43]
   <!--end:content-->
   CMS_CONTAINER[44]
   </div>    
(alles was in den Containern 40 - 43 eines Artikels angezeigt wird, wird auch gedruckt)

4.) Modul Druckvorschau
Input

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     Druckvorschau
* Version     :     1.0
* Author      :     schlaucher
* Created     :     19-11-2006
* Modified    :     
************************************************/ 

$MOD_DV_sel_idcat = "CMS_VALUE[1]";
$MOD_DV_sel_idcatart = "CMS_VALUE[2]";

echo '<table cellspacing="0" cellpadding="10" border="0"><tr valign="top">'; 

echo '<tr>
        <td>'.mi18n("Kategorie der Druckvorschau w&auml;hlen:").'</td>
        <td>'.buildCategorySelect("CMS_VAR[1]", "CMS_VALUE[1]").'</td>
    </tr>';

#Article selector
echo '<tr>
        <td>'.mi18n("Artikel der Druckvorschau w&auml;hlen").': </td>
	    <td style="padding:-5px">
            <select name="CMS_VAR[2]" style="width:200px">
                <option value="" selected>'.i18n("Bitte ausw&auml;hlen").'</option>';

                if ($MOD_DV_sel_idcat != "0" && strlen($MOD_DV_sel_idcat) > 0) 
                    {
	                $sql    = "SELECT ARTLANG.title AS title, CATART.idcatart AS idcatart ";
                    $sql   .= "FROM ".$cfg["tab"]["art_lang"]." AS ARTLANG,";
                    $sql   .= " ".$cfg["tab"]["cat_art"]." AS CATART ";
                    $sql   .= "WHERE CATART.idcat = '".$MOD_DV_sel_idcat."' ";
                    $sql   .= "AND ARTLANG.idart = CATART.idart ";
                    $sql   .= "AND ARTLANG.idlang = '".$lang."'";

	                $db->query($sql);

	                while ($db->next_record()) 
                        {
                		$MOD_DV_sel_catartid = $db->f('idcatart');
		                $MOD_DV_sel_title = $db->f('title');

		                if ($MOD_DV_sel_idcatart != $MOD_DV_sel_catartid) 
                            {
			                echo '<option value="'.$MOD_DV_sel_catartid.'">&nbsp;'.$MOD_DV_sel_title.'</option>';
		                    } else {
			                echo '<option selected="selected" value="'.$MOD_DV_sel_catartid.'">&nbsp;'.$MOD_DV_sel_title.'</option>';
		                    }

	                    }
                    }

        echo '</select>&nbsp;<input type="image" src="images/submit.gif">
        </td>
    </tr>

</table>';
Output

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Druckvorschau
* Version     :     1.0
* Author      :     schlaucher
* Created     :     19-11-2006
* Modified    :     
************************************************/ 
$MOD_DV_sel_idcatart = "CMS_VALUE[2]";

echo '
<div>
<a href="javascript:;" onclick="MM_openBrWindow(\'http://'.$SERVER_NAME.$SCRIPT_NAME.'?idcatart='.$MOD_DV_sel_idcatart.'&cms_idcatart='.$idcatart.'&cms_idcat='.$idcat.'\',\'\',\'resizable=yes, scrollbars=yes, width=700, height=750\')"  style="font-size:10px;"><img src="upload/bilder/layout/drucker.jpg" style="margin-right:10px;margin-top:-4px;" align="absmiddle" width="20" height="13" alt="Druckvorschau" title="Druckvorschau" border="0"/>Druckvorschau</a></div>  

<script type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}
//-->
</script>';
?>
Im Imput Bereich des Moduls müsst Ihr den Artikel mit dem Druckkopf hinterlegen. Ein Druckersymbol müsst Ihr Euch halt suchen.
Diese Modul muss in die Templates aller Artikel, welche ausgedruckt werden sollen. (Bei mir z.B. im Container 44)

fertig!

Gruß
schlaucher
Zuletzt geändert von schlaucher am Di 5. Dez 2006, 10:16, insgesamt 1-mal geändert.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 25. Nov 2006, 17:26

gibts ein demo zum ansehen ?
*** make your own tools (wishlist :: thx)

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » So 26. Nov 2006, 17:20

emergence hat geschrieben:gibts ein demo zum ansehen ?
ja, auf http://www.go4support.de findest Du einige Beispielseiten (z.B. Beschreibungen der Module)

Gruß
schlaucher

toddy73
Beiträge: 11
Registriert: Mo 21. Nov 2005, 15:59
Kontaktdaten:

Beitrag von toddy73 » Mi 29. Nov 2006, 12:36

Moin Schlaucher,

klasse Modul, hab da aber noch ein Problem.

Wenn bei mir der Text länger als eine Seite ist, wird er zwar angezeigt aber nicht ausgedruckt. Sprich der Text ist ca 2 Seiten lang, es wird aber nur die erste Seite gedruckt.

Gruß
toddy73

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Mi 29. Nov 2006, 13:15

toddy73 hat geschrieben:Moin Schlaucher,

klasse Modul, hab da aber noch ein Problem.

Wenn bei mir der Text länger als eine Seite ist, wird er zwar angezeigt aber nicht ausgedruckt. Sprich der Text ist ca 2 Seiten lang, es wird aber nur die erste Seite gedruckt.

Gruß
toddy73
nur mal zur Probe, versuch mal das zu drucken. Kommt dann auch nur eine Seite? Bei mir kommen da ca. 9 Seiten aus dem Drucker.

http://www.go4support.de/contenido-module/terminliste/

Gruß
schlaucher

toddy73
Beiträge: 11
Registriert: Mo 21. Nov 2005, 15:59
Kontaktdaten:

Beitrag von toddy73 » Mi 29. Nov 2006, 15:13

Hatte ich schon getestet, läuft bestens

Gruß
toddy73

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Mi 29. Nov 2006, 22:21

toddy73 hat geschrieben:Hatte ich schon getestet, läuft bestens

Gruß
toddy73
o.k., dann könnte es an der CSS Datei für das Drucken liegen. Überprüfe mal dort die Einstellungen.

toddy73
Beiträge: 11
Registriert: Mo 21. Nov 2005, 15:59
Kontaktdaten:

Beitrag von toddy73 » Do 30. Nov 2006, 07:59

Super,
läuft bestens!

Der Fehler lag in der CSS, hatte dummerweise beim kopieren "html, body {height:100%; }" mit drinnen.

Vielen Dank für die Hilfe.

Gruß
Toddy73

nomore
Beiträge: 130
Registriert: Sa 15. Mai 2004, 19:38
Kontaktdaten:

Beitrag von nomore » Mo 4. Dez 2006, 20:47

:( Hallo, das ganze mal so eingebaut wie beschrieben. Aber wenn ich nun bei einem Artikel in dem das Modul integriert ist, auf Druckvorschau gehe, macht die Druckvorschau auf, zeigt mir aber nicht den aktuellen Artikel, sondern einen anderen. Wo könnte ich da was falsch gemacht haben? :?:
Irgendwann läuft alles, fragt sich nur wann,
und wohin! :-)
ConTemplates.de

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Mo 4. Dez 2006, 20:54

nomore hat geschrieben::( Hallo, das ganze mal so eingebaut wie beschrieben. Aber wenn ich nun bei einem Artikel in dem das Modul integriert ist, auf Druckvorschau gehe, macht die Druckvorschau auf, zeigt mir aber nicht den aktuellen Artikel, sondern einen anderen. Wo könnte ich da was falsch gemacht haben? :?:
ja :lol:

Spaß bei Seite, was für ein Artikel wird denn angezeigt? Immer der gleiche?
Wenn Du z.B. in der Konfiguration nicht den Artikel mit der Druckvorschau angegeben hast, erscheint der Standard Fehler Artikel oder Artikel Nr. 1.
Bitte noch mal die Konfiguration überprüfen.

Gruß
schlaucher

nomore
Beiträge: 130
Registriert: Sa 15. Mai 2004, 19:38
Kontaktdaten:

Beitrag von nomore » Mo 4. Dez 2006, 21:16

Hallo vielen Dank für die rsche Antwort! :D Dein Tipp war Goldrichtig!!! (freu)
Irgendwann läuft alles, fragt sich nur wann,
und wohin! :-)
ConTemplates.de

nomore
Beiträge: 130
Registriert: Sa 15. Mai 2004, 19:38
Kontaktdaten:

Beitrag von nomore » Di 5. Dez 2006, 08:50

Hallo eine kleine Frage hätte ich noch. Wie kann ich die zwei Buttons "Drucken" & "Schließen" vom Druck ausschließen? :?:
Irgendwann läuft alles, fragt sich nur wann,
und wohin! :-)
ConTemplates.de

schlaucher
Beiträge: 444
Registriert: Mi 14. Sep 2005, 10:38
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von schlaucher » Di 5. Dez 2006, 10:14

nomore hat geschrieben:Hallo eine kleine Frage hätte ich noch. Wie kann ich die zwei Buttons "Drucken" & "Schließen" vom Druck ausschließen? :?:

in dem Du in Deinem CSS fürs drucken das display:none; für die Buttons setzt.

Code: Alles auswählen

#print_button 
 {
 display:none;
 }

#button
 {
 display:none;
 }
Gruß
schlaucher

nomore
Beiträge: 130
Registriert: Sa 15. Mai 2004, 19:38
Kontaktdaten:

Beitrag von nomore » Di 5. Dez 2006, 15:20

Dankeschön!!!!!
Irgendwann läuft alles, fragt sich nur wann,
und wohin! :-)
ConTemplates.de

milez
Beiträge: 29
Registriert: Fr 8. Dez 2006, 13:35
Kontaktdaten:

Beitrag von milez » Fr 8. Dez 2006, 13:48

Schönes Modul!

Es wäre besser den Pfad unabhängig von der ServerRoot zu setzen, hatte hier lokal damit Probleme.

z.B.

Code: Alles auswählen

<a href="javascript:;" onclick="MM_openBrWindow(\''.$sess->url('front_content.php').'?idcatart=...
Ergänzung:
Anstatt den Druckartikel über die Eingabe zu definieren, habe ich ihn als Mandanten Variable definiert, und im Modul wieder herausgeholt. Dann braucht man nicht jedes Template konfigurieren.

Code: Alles auswählen

$cApiClient = new cApiClient($client);
$MOD_DV_sel_idcat = $cApiClient->getProperty('druckvorschau', 'druckkategorie');
$MOD_DV_sel_idcatart = $cApiClient->getProperty('druckvorschau', 'druckartikel');
Besten Gruß
milez

Gesperrt