Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

PDF Catalog v.1.5


Recommended Posts

Has anyone experienced there computer freezing after trying to click save to generate the pdf files?

 

My computer keeps freezing while trying to generate the pdf files, It is as if the fpdf is being run on my computer. But it is not. It is on the server. I checked my commit charge for windows and it was well above the limit and i then get a warning telling me that my virtual memory is set to low and it is being set higher by windows.

 

I am using mozilla firefox 1.0 browser. This is very strange.

 

Any ideas as to why this happens?

 

Thanx

Link to comment
Share on other sites

  • Replies 504
  • Created
  • Last Reply

Top Posters In This Topic

The catalog is also not being generated. I get no errors, All that happens is the script completely freezes my browser.

 

This is on my server with ssh access so i check top and the script seems to be getting run because my server is using 62% processor time until it times out or appears to finish. I then check my catalogues folder but it is not there.

Link to comment
Share on other sites

When I click save to start generating the catalog My processor shhots to 100%

 

The commit charge is

 

Peak 1524448

Limit 1528544

 

Available memory drops from

670 MB free to 2MB free

 

page file usage goes above 1 GB

 

Once the script seems to stop running it all goes back to normal with no generated catalog or any errors.

 

I will really appreciate any ideas anyone could shoot at this as I have tried everything I know to do.

Link to comment
Share on other sites

Sorry for all the posts

 

Found this error in the error logs.

 

PHP Warning: feof(): supplied argument is not a valid stream resource in /home/fridgemags/lsws/html/admin/pdf_fpdf.php on line 1495

PHP Warning: fread(): supplied argument is not a valid stream resource in /home/fridgemags/lsws/html/admin/pdf_fpdf.php on line 1496

 

 

We are having nasty weather here so I have to power down for now. I will check in later. Thanx in advance for any info on these errors.

Link to comment
Share on other sites

Ok I can now sort of generate the pdf.

 

Ity works fine if i do it without images. Everything lays out ok.

 

If i produce it with images on, it will produce the pdf file without spitting images out at me. But

 

When you open the pdf

 

Acrobat reader gives the following errors and the file is all garbled.

 

Error 1

 

A drawing error occured.

 

Error 2

 

Insufficient data for an image.

 

My questions

 

What data does it need to draw an image?

 

The default images show up but are garbled.

 

You can download the pdf from

 

http://www.fridgemags.com/catalogues/catalog_1.pdf

 

PLease please help me.

 

I have customers flooding me with requests for an offline printable catalog.

 

Thanx

Link to comment
Share on other sites

Ok I can now sort of generate the pdf.

 

Ity works fine if i do it without images. Everything lays out ok.

 

If i produce it with images on, it will produce the pdf file without spitting images out at me. But

 

When you open the pdf

 

Acrobat reader gives the following errors and the file is all garbled.

 

Error 1

 

A drawing error occured.

 

Error 2

 

Insufficient data for an image.

 

My questions

 

What data does it need to draw an image?

 

The default images show up but are garbled.

 

You can download the pdf from

 

http://www.fridgemags.com/catalogues/catalog_1.pdf

 

PLease please help me.

 

I have customers flooding me with requests for an offline printable catalog.

 

Thanx

 

 

You must have fixed this??? Because the file looks good to me from here.

 

 

-= Dave =-

Link to comment
Share on other sites

Yes I got it fixed, Long nite staring at source code. :'(

 

What I changed.

 

In /admin/pdf_catalogue.php line 173

 

change:

$destination =DIR_FS_CATALOG."catalogues/";

 

To

$destination=DIR_FS_CATALOG."catalogues/";

 

Notice the extra space after $destination

 

And also implemented a fix found earlier in the forum.

 

in /admin/pdf_fpdf.php around line 1475

 

change

if(!$a)

               print('Missing or incorrect image file: '.$file);
 $file=DIR_S_CATALOG.DIR_WS_IMAGES.DEFAULT_IMAGE;

 

To

if(!$a) {
print('Missing or incorrect image file: '.$file);
$file=DIR_S_CATALOG.DIR_WS_IMAGES.DEFAULT_IMAGE;
}

 

Notice the missing brackets.

 

CREDIT goes to TooLoo for the second fix above. Thanx

 

This is what worked for me.

 

I hope it will work for some of you

having problems.

Link to comment
Share on other sites

  • 1 month later...

in my admin section when i try to create my pdf, this is what i get

 

Warning: fopen(/home/user/public_html/distro/../pdf_catalogs/mtw_catalog_1.pdf): failed to open stream: No such file or directory in /home/user/public_html/distro/admin/pdf_fpdf.php on line 1052

FPDF error: Unable to create output file: /home/user/public_html/distro/../pdf_catalogs/mtw_catalog_1.pdf

 

on my site when i click my "download catalog" link, that page displays this:

 

TEXT_PDF_DESCRIPTION

 

Warning: filesize(): Stat failed for catalogues/catalog_1.pdf (errno=2 - No such file or directory) in /home/user/public_html/distro/pdf_catalogue_info.php on line 89

Downloadable catalogue (0.00 Mo) 

 

 

anyone have an idea what i missing or need to fix? much thanks..

Link to comment
Share on other sites

  • 2 weeks later...

Hello everyone! I new to osCommerce and have been trying to fully mod the package the way I want before taking the site live and have run into a problem with the PDF Catalog 1.5.9 contrib. It seems to work ok if I use gif images but the images appear to come in full size and overlap. The problem I am having is with the jpg images everytime I try to create the catalog it gives me these warnings:

 

Warning: imagecreatetruecolor(): Invalid image dimensions in

admin/pdf_catalogue.php on line 190

 

Warning: imagecopyresized(): supplied argument is not a valid Image resource in admin/pdf_catalogue.php on line 191

 

Warning: imagejpeg(): supplied argument is not a valid Image resource in admin/pdf_catalogue.php on line 193

PDF Catalog(s) Generation

 

This is what the code looks like around the section where the warnings are occuring

 

$array=explode("/", $path);

$last=sizeof($array);

$size = getimagesize($path);

if($size[0] > $size[1]) {

$im=imagecreatetruecolor($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]);

} else {

$im=imagecreatetruecolor($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]);

}

if(!imagejpeg($im, $destination.$array[$last-1])) {

exit();

}

 

$path=$destination.$array[$last-1];

$this->SetLineWidth(1);

 

I've tried various tweaks found in this thread but none have seemed to work.

 

An addition note my osCommerce package is not a standard install. The admin and catalog are seperate folders. If anyone could help me out it would be greatly appreciated!!

Link to comment
Share on other sites

hi

 

 

can anyone tell me how to put my company logo in the pdf catalog,

 

i only sem to be able to get the text up not the actual image file my logo is saved as

 

 

 

 

many thanks

nikki :thumbsup:

Link to comment
Share on other sites

  • 3 weeks later...
When I click save to start generating the catalog My processor shhots to 100%

 

The commit charge is 

 

Peak 1524448

Limit  1528544

 

Available memory drops from

670 MB free to 2MB free

 

page file usage goes above 1 GB

 

Once the script seems to stop running it all goes back to normal with no generated catalog or any errors.

 

I will really appreciate any ideas anyone could shoot at this as I have tried everything I know to do.

 

Hi,

 

I have the same problem, can you tell me the solution, please????

 

Thank you :blink:

Link to comment
Share on other sites

Hellow i'm having the following problem could any1 help me pleez

Warning: fopen(/images/oscommerce.gif): failed to open stream: No such file or directory in admin\pdf_fpdf.php on line 1493

 

Warning: feof(): supplied argument is not a valid stream resource in admin\pdf_fpdf.php on line 1495

 

The last problem occures about 100 times so the result is that i get a huge list of problems

Link to comment
Share on other sites

Hey,

 

I am having a few problems with this modification. I have edited the look of it quite a bit to make it look better, but I believe these problems happened before I modified anything.

 

My main problem at the moment is when I set it to resize images, it comes up with errors. I edited the php.ini file and uncommented the extension=php_gd2.dll so that it would load the GD2 library.

Now, I am getting the following errors:

 

Warning: imagecreate() [function.imagecreate]: Invalid image dimensions in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 194

 

Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 195

 

Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 200

 

Does anyone have any idea on how to fix it? My code has been modified to firstly check whether the picture actually exists so that it will just then replace the file with another file. The code is the following:

 

<?php

/******************************************************************************/

/* PDF Catalogs v.1.56 for osCommerce v.2.2 MS2 */

/* */

/* by Antonios THROUVALAS ([email protected]), April 2004 */

/* by Nicolas Hilly ([email protected]), August 2004 */

/* by Christophe Buchi ([email protected]), September 2004

/* */

/* Based on PDF Catalogs v.1.4 by [email protected] */

/* */

/* Uses FPDF (http://www.fpdf.org), Version 1.52, by Olivier PLATHEY */

/* */

/* Credit goes also to: */

/* - Yamasoft (http://www.yamasoft.com/php-gif.zip) for their GIF class, */

/* - Jerome FENAL ([email protected]) for introducing GIF Support */

/* in the FPDF Class, */

/* - The osC forums members (www.oscommerce.com/forums)! */

/* */

/* Please donate to the osCommerce Core Team! */

/* Freeware, You may use, modify and redistribute this software as you wish! */

/******************************************************************************/

 

//define('FPDF_FONTPATH','font/');

require('pdf_config.php');

require('pdf_fpdf.php');

require('includes/application_top.php');

 

set_time_limit(120);

 

$products_index_array;

 

class PDF extends FPDF

{

//Colonne courante

var $col=0;

//Ordonn?e du d?but des colonnes

var $y0;

var $categories_string_spe = '';

var $categories_string = '';

var $categories_id = '';

var $levels = '';

var $parent_category_name;

var $ifw = 0; //internal width margin for the products (image and text) description

var $text_fw = 0; //text width for the products (text) description

var $ifh = 0; //internal height margin for the products description

var $products_index_array;

var $products_index_list='';

 

function Header()

{

 

//Background Color

$background_color_table=explode(",",BACKGROUND_COLOR);

$this->SetFillColor($background_color_table[0], $background_color_table[1], $background_color_table[2]);

$this->ifw = $this->fw * 0.95; // A4 portrait = 200

$this->ifh = $this->fh * 0.87; // A4 portrait = 260

$this->Rect(0,0,$this->fw,$this->fh,F); // Draw background

 

//Logo: If LOGO_IMAGE defined, show image with logo, else show text

if (PDF_LOGO) {

$this->Image(DIR_FS_CATALOG.DIR_WS_IMAGES.PDF_LOGO,16,8,0,29);

} else {

$this->SetFont('Arial','B',18);

$this->SetLineWidth(0);

$w=$this->GetStringWidth(PDF_TITLE)+6;

//$this->SetX((210-$w)/2);

$this->SetFillColor(100,100,100);

$this->Cell($w,9,PDF_TITLE,0,0,'C');

}

//Ann?e en cour

$aujourdhui = getdate();

$annee = strftime(PDF_DATE_FORMAT);

 

$this->SetFont('Arial','I',12);

$this->SetTextColor(255,255,255);

$this->Cell(0,8,$annee." ",0,1,'R');

if (PDF_LOGO) {

$this->Ln(20);

} else {

$this->Ln(2);

}

$x=$this->GetX();

$y=$this->GetY();

// $this->Line($x,$y,$this->ifw,$y);

// $this->Ln(3);

//Sauvegarde de l'ordonn?e

// $this->y0=$this->GetY();

}

 

function Footer()

{

//Pied de page

$this->SetY(-15);

$x=$this->GetX();

$y=$this->GetY();

$this->SetLineWidth(0.2);

$this->Line($x,$y,$this->ifw,$y);

$this->SetFont('Arial','I',8);

$this->Cell(0,10,'Page '.$this->PageNo().'/{nb} ',0,0,'R');

}

 

function CheckPageBreak($h)

{

//Si la hauteur h provoque un d?bordement, saut de page manuel

if($this->GetY()+$h>$this->PageBreakTrigger) $this->AddPage($this->CurOrientation);

}

 

function NbLines($w,$txt)

{

//Calcule le nombre de lignes qu'occupe un MultiCell de largeur w

$cw=&$this->CurrentFont['cw'];

if($w==0)

$w=$this->w-$this->rMargin-$this->x;

$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;

$s=str_replace("\r",'',$txt);

$nb=strlen($s);

if($nb>0 and $s[$nb-1]=="\n")

$nb--;

$sep=-1;

$i=0;

$j=0;

$l=0;

$nl=1;

while($i<$nb)

{

$c=$s[$i];

if($c=="\n")

{

$i++;

$sep=-1;

$j=$i;

$l=0;

$nl++;

continue;

}

if($c==' ')

$sep=$i;

$l+=$cw[$c];

if($l>$wmax)

{

if($sep==-1)

{

if($i==$j)

$i++;

}

else

$i=$sep+1;

$sep=-1;

$j=$i;

$l=0;

$nl++;

}

else

$i++;

}

return $nl;

}

 

function LineString($x,$y,$txt,$cellheight)

{

//calculate the width of the string

$stringwidth=$this->GetStringWidth($txt);

//calculate the width of an alpha/numerical char

$numberswidth=$this->GetStringWidth('1');

$xpos=($x+$numberswidth);

$ypos=($y+($cellheight/2));

$this->Line($xpos,$ypos,($xpos+$stringwidth),$ypos);

}

 

function ShowImage(&$width,&$height,$link,$path)

{

$width=min($width,MAX_IMAGE_WIDTH);

$height=min($height,MAX_IMAGE_HEIGHT);

 

if(RESIZE_IMAGES) {

$destination=DIR_FS_CATALOG."catalogues/";

if(substr(strtolower($path), (strlen($path)-4),4)==".jpg" || substr(strtolower($path), (strlen($path)-5),5)==".jpeg") {

// if (!file_exists($path))

// {

// $path=DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg";

// }

$src=imagecreatefromjpeg($path);

} else if (substr(strtolower($path), (strlen($path)-4),4)==".png") {

$src=imagecreatefrompng($path);

} else {

echo "Only PNG and JPEG";

exit();

}

 

$array=explode("/", $path);

$last=sizeof($array);

$size = getimagesize($path);

if($size[0] > $size[1]) {

$im=imagecreate($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]);

} else {

$im=imagecreate($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]);

}

if(!imagejpeg($im, $destination.$array[$last-1])) {

exit();

}

 

$path=$destination.$array[$last-1];

$this->SetLineWidth(1);

$this->Cell($width+3,$height,"",1,0);

$this->SetLineWidth(0.2);

$this->Image($path,($this->GetX()-$width), $this->GetY(), $width, $height,'',$link);

$this->SetFont('Arial','',8);

unlink($path);

} else {

$this->SetLineWidth(1);

// NH $this->Cell($width,$height,"",1,0);

$this->Cell($width+3,$height,"",SIZE_BORDER_IMAGE,0);

$this->SetLineWidth(0.2);

//NH $this->Image($path,($this->GetX()-$width), $this->GetY(), $width, $height,'',$link);

$this->Image($path,($this->GetX()-$width), $this->GetY(),$width ,'' ,'',$link);

$this->SetFont('Arial','',8);

}

}

 

 

//Rangement de l'arbre (Level est le niveau de sous-categorie)

function Order($cid, $level, $foo, $cpath)

{

if ($cid != 0) {

if($level>1) {

$nbspaces=7;

$dessinrep="|___ ";

//j'inverse le dessin

$revstring = strrev($dessinrep);

//je lui ajoute nbspace pour chaque niveau de sous-repertoire

$revstring .= str_repeat(" ",$nbspaces*($level-2));

//je r?inverse la chaine

$this->categories_string_spe .= strrev($revstring);

}

$this->levels .=$level." ";

$this->categories_id .= $cid." ";

$this->categories_string .= $foo[$cid]['name'];

$this->categories_string_spe .= $foo[$cid]['name'];

 

if (SHOW_COUNTS) {

$products_in_category = tep_products_in_category_count($cid,'false');

if ($products_in_category > 0) {

$this->categories_string_spe .= ' (' . $products_in_category . ')';

}

}

$this->categories_string .= "\n";

$this->categories_string_spe .= "\n";

}

//Parcourir l'arbre des categories (lecture de la table de hachage comme en Perl)

if (sizeof($foo) > 0 ) {

foreach ($foo as $key => $value) {

if ($foo[$key]['parent'] == $cid) {

$this->Order($key, $level+1, $foo, $cid);

}

}

}

}

 

function ParentsName($current_category_level,$i,&$categorieslevelsarray, &$categoriesnamearray)

{

 

$k=$i;

while($k>0) {

if($categorieslevelsarray[$k] == ($current_category_level-1)) {

$this->$parent_category_name=$categoriesnamearray[$k];

break;

}

$k--;

}

}

 

function CalculatedSpace($y1,$y2,$imageheight)

{

//Si les commentaires sont - importants que l'image au niveau de l'espace d'affichage

if(($h2=$y2-$y1) < $imageheight) {

$this->Ln(($imageheight-$h2)+3);

} else {

$this->Ln(3);

}

}

 

function PrepareIndex($name,$manufacturer,$category)

{

$this->products_index_array[] = array (

'name' => substr($name,0,55),

'manufacturer' => substr($manufacturer,0,20),

//'category' => substr($category,0,18),

'page' => $this->PageNo());

}

 

function DrawIndex()

{

//5 = hauteur des cellules

$h= 5 * sizeof($this->products_index_array) ."<br>";

if($h< $this->ifh) {

$this->CheckPageBreak($h);

}

$this->AddPage();

$this->Ln(5);

// echo "<br>HHHH sizeof= " . sizeof($this->products_index_array);

 

if (!function_exists(CompareIndex)) {

function CompareIndex($a, $B)

{

// return strcmp($a['name'], $b['name']);

return strncasecmp($a['name'],$b['name'],8); // seulement les 8 premiers caracteres

}

}

usort($this->products_index_array, CompareIndex);

 

$this->SetFont('Courier','B',11);

$this->Cell(1,11,"",0,0);

$this->MultiCell($this->ifw,11,PDF_INDEX_HEADER,0,'C');

$this->SetFont('Courier','',11);

if (strlen(INDEX_SEPARATOR) < 1) {

$index_separator=" ";

} else {

$index_separator=INDEX_SEPARATOR;

}

foreach ($this->products_index_array as $key => $value) {

if (strlen($value['manufacturer']) > 0) {

$ligne_index = str_pad($value['name']." - ". $value['manufacturer'],53,$index_separator,STR_PAD_RIGHT);

} else {

$ligne_index = str_pad($value['name'],53,$index_separator,STR_PAD_RIGHT);

}

$ligne_index .= str_pad($value['category'],18,$index_separator,STR_PAD_LEFT);

$ligne_index .= str_pad($value['page'], 5, $index_separator, STR_PAD_LEFT);

$this->Cell(1,6,"",0,0);

$this->MultiCell(0,6,$ligne_index,0,'C');

// echo "<br>HHHH : " . $ligne_index;

}

// echo "<br>HHHH wpt =" .$this->wPt . " fw =" . $this->fw. " ifw =" . $this->ifw ." text_fw =" . $this->text_fw;

// echo "<br>HHHH hpt =" .$this->hPt . " fh =" . $this->fh. " ifh =" . $this->ifh;

}

 

function DrawCells($data_array)

{

$totallines=0;

for($i=2;$i<(sizeof($data_array)-1);$i++)

{

$totallines+=$this->NbLines(($this->ifw -$data_array[0]),$data_array[$i]);

}

 

//5 = hauteur des cellules

$h=5*($totallines+1)."<br>";

 

//si la description du produit ne prend pas toute la page

if($h< $this->ifh)

{

$this->CheckPageBreak($h);

}

 

 

if(SHOW_PRODUCTS_LINKS)

{ // NH DIR_WS_CATALOG

$link=HTTP_CATALOG_SERVER . DIR_WS_CATALOG ."product_info.php?products_id=".$data_array[10]."&language=".$data_array[11];

}

else

{

$link='';

}

 

if(SHOW_IMAGES && strlen($data_array[12]))

{

//If Small Image Width and Small Image Height are defined

if(strlen($data_array[0])>1 && strlen($data_array[1])>1)

{

$this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]);

$y1=$this->GetY();

}

//If only Small Image Width is defined

else if(strlen($data_array[0])>1 && strlen($data_array[1]))

{

if (!file_exists($data_array[12]))

{

$data_array[12] = DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg";

}

$heightwidth=getimagesize($data_array[12]);

$data_array[0]=$data_array[0];

$data_array[1]=$heightwidth[1]*PDF_TO_MM_FACTOR;

$this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]);

$y1=$this->GetY();

}

//If only Small Image Height is defined

else if(strlen($data_array[0]) && strlen($data_array[1])>1)

{

$heightwidth=getimagesize($data_array[12]);

$data_array[0]=$width=$heightwidth[0]*PDF_TO_MM_FACTOR;

$data_array[1]=$data_array[1];

$this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]);

$y1=$this->GetY();

}

else

{

$heightwidth=getimagesize($data_array[12]);

$data_array[0]=$heightwidth[0]*PDF_TO_MM_FACTOR;

$data_array[1]=$heightwidth[1]*PDF_TO_MM_FACTOR;

$this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]);

$y1=$this->GetY();

}

 

//Margin=10

$this->SetX(10);

}

else

{

$data_array[0]=$data_array[1]=0;

$y1=$this->GetY();

$this->SetFont('Arial','',8);

}

// Calcul l'espace libre a droite de l'image

$this->text_fw = $this->ifw - 18 - $data_array[0];

 

if(SHOW_NAME)

{

if(strlen($data_array[2]))

{

// Cell(marge gauche, hauteur, text, bordure, )

$this->Cell($data_array[0]+6,5,"",0,0);

$x=$this->GetX();

$y=$this->GetY();

$name_color_table=explode(",",NAME_COLOR);

$this->SetFillColor($name_color_table[0],$name_color_table[1],$name_color_table[2]);

$this->MultiCell($this->text_fw,5,$data_array[2],PRODUCTS_BORDER,'L',1);

}

}

if(SHOW_MODEL)

{

if(strlen($data_array[3]))

{

$this->Cell($data_array[0]+6,5,"",0,0);

$this->MultiCell($this->text_fw,5,"Model No: ".$data_array[3],PRODUCTS_BORDER,'L');

}

}

 

if(SHOW_DATE_ADDED)

{

if(strlen($data_array[4]))

{

$this->Cell($data_array[0]+6,5,"",0,0);

$this->MultiCell($this->text_fw,5,$data_array[4],PRODUCTS_BORDER,'L');

}

}

if(SHOW_MANUFACTURER)

{

if(strlen($data_array[5])) {

$this->Cell($data_array[0]+6,5,"",0,0);

$this->SetFont('Arial','I');

$this->MultiCell($this->text_fw,5,$data_array[5],PRODUCTS_BORDER,'L');

$this->SetFont('Arial','');

}

}

// NH si il n'y a pas de bordure, ajout d'un petit separateur

if (!PRODUCTS_BORDER) {

$this->Cell($data_array[0]+6,2,"",0,0);

$x=$this->GetX();

$y=$this->GetY();

$this->MultiCell($this->text_fw,1,"",0,'C');

//$this->LineString($x+3,$y," ",2);

$this->Line($x+4,$y,$x+15,$y);

}

if(SHOW_DESCRIPTION)

{

if(strlen($data_array[6]))

{

$this->Cell($data_array[0]+6,5,"",0,0);

$this->MultiCell($this->text_fw,5,$data_array[6],PRODUCTS_BORDER,'L');

}

}

if(SHOW_TAX_CLASS_ID)

{

if(strlen($data_array[7]))

{

$this->Cell($data_array[0]+6,5,"",0,0);

$this->MultiCell($this->text_fw,5,$data_array[7],PRODUCTS_BORDER,'L');

}

 

}

if(VAT)

{

$vatprice=sprintf("%01.".DIGITS_AFTER_DOT."f",((VAT/100)*$data_array[9])+$data_array[9]);

$vatspecialsprice=sprintf("%01.".DIGITS_AFTER_DOT."f",((VAT/100)*$data_array[8])+$data_array[8]);

}

else

{

$vatprice=sprintf("%01.".DIGITS_AFTER_DOT."f",$data_array[9]);

$vatspecialsprice=sprintf("%01.".DIGITS_AFTER_DOT."f",$data_array[8]);

}

if(SHOW_PRICES)

{

// NH si il n'y a pas de bordure, ajout d'un petit separateur

if (!PRODUCTS_BORDER) {

$this->Cell($data_array[0]+6,2,"",0,0);

$x=$this->GetX();

$y=$this->GetY();

$this->MultiCell($this->text_fw,1,"",0,'C');

//$this->LineString($x+3,$y," ",2);

$this->Line($x+4,$y,$x+15,$y);

}

 

if(strlen($data_array[8])) //If special price

{

$this->Cell($data_array[0]+6,5,"",0,0);

 

$x=$this->GetX();

$y=$this->GetY();

$specials_price_color_table=explode(",",SPECIALS_PRICE_COLOR);

$this->SetTextColor($specials_price_color_table[0],$specials_price_color_table[1],$specials_price_color_table[2]);

$this->SetFont('Arial','B','');

 

 

if(CURRENCY_RIGHT_OR_LEFT == 'R') {

$this->MultiCell($this->text_fw,5,$vatprice.CURRENCY."\t\t\t".$vatspecialsprice.CURRENCY,PRODUCTS_BORDER,'L'); // le rajout d'un param ,1 remplie la couleur de fond );

} else if (CURRENCY_RIGHT_OR_LEFT == 'L') {

$this->MultiCell($this->text_fw,5,CURRENCY.$vatprice."\t\t\t".CURRENCY.$vatspecialsprice,PRODUCTS_BORDER,'L'); // le rajout d'un param ,1 remplie la couleur de fond );

} else {

echo "<b>Choose L or R for CURRENCY_RIGHT_OR_LEFT</b>";

exit();

}

$this->LineString($x,$y,"Price: ".$vatprice.CURRENCY,5);

}

else if(strlen($data_array[9]))

{

$this->Cell($data_array[0]+6,5,"",0,0);

if(CURRENCY_RIGHT_OR_LEFT == 'R') {

$this->MultiCell($this->text_fw,5,"Price: ".$vatprice.CURRENCY,PRODUCTS_BORDER,'L');

}else if(CURRENCY_RIGHT_OR_LEFT == 'L') {

$this->MultiCell($this->text_fw,5,"Price: ".CURRENCY.$vatprice,PRODUCTS_BORDER,'L');

} else {

echo "<b>Choose L or R for CURRENCY_RIGHT_OR_LEFT</b>";

exit();

}

}

$this->SetTextColor(0,0,0);

}

$y2=$this->GetY();

 

//si la description du produit ne prend pas toute la page

if($h< $this->ifh)

{

$this->CalculatedSpace($y1,$y2,$data_array[1]);

}

else

{

$this->Ln(5);

}

 

}

 

function CategoriesTree($languages_id,$languages_code)

{

//selectionne toute les categories

$query = "SELECT c.categories_id, cd.categories_name, c.parent_id

FROM " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd

WHERE c.categories_id = cd.categories_id and cd.language_id='" . $languages_id ."'

ORDER by sort_order, cd.categories_name";

 

$categories_query = tep_db_query($query);

while ($categories = tep_db_fetch_array($categories_query)) {

//Table de hachage

$foo[$categories['categories_id']] = array(

'name' => $categories['categories_name'],

'parent' => $categories['parent_id']);

}

 

$this->Order(0, 0, $foo, '');

//$this->AddPage();

$this->TitreChapitre("");

if (SHOW_INTRODUCTION) {

$this->Ln(18);

$file= DIR_FS_CATALOG_LANGUAGES . tep_get_languages_directory($languages_code) . '/pdf_define_intro.php';

 

// echo "<br>HHHH " . $file;

if (file_exists($file)) {

$file_array = @file($file);

$file_contents = @implode('', $file_array);

$this->MultiCell(0,6,strip_tags($file_contents),$this->ifw,1,'J');

}

 

}

$this->SetFont('Arial','',DIRECTORIES_TREE_FONT_SIZE);

if (SHOW_TREE) {

$this->Ln(320);

$this->MultiCell(0,6,$this->categories_string_spe,0,1,'L');

}

 

}

 

function CategoriesListing($languages_id, $languages_code)

{

$this->products_index_array=array();

$this->products_index_list='';

$this->index_lenght=0;

 

//Recuperation de toutes les categories dans l'ordre

$categoriesidarray=explode(" ",$this->categories_id);

$categoriesnamearray=explode("\n",$this->categories_string);

$categorieslevelsarray=explode(" ",$this->levels);

 

//Convertion pixels -> mm

$imagewidth=SMALL_IMAGE_WIDTH*PDF_TO_MM_FACTOR;

$imageheight=SMALL_IMAGE_HEIGHT*PDF_TO_MM_FACTOR;

 

for($i=0; $i<sizeof($categoriesidarray)-1; $i++) {

$category_count_products = tep_products_in_category_count($categoriesidarray[$i],'false');

if (!((!SHOW_EMPTY_CATEGORIES) and ($category_count_products < 1))) {

$taille=0;

$current_category_id=$categoriesidarray[$i];

$current_category_name=$categoriesnamearray[$i];

$current_category_level=$categorieslevelsarray[$i];

$requete_prod="select p.products_id, pd.products_name, pd.products_description, p.products_image, p.products_model, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, p.products_date_added, m.manufacturers_name from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id='".$current_category_id."' order by pd.products_name, p.products_date_added DESC";

 

$SHOW_catalog_query = tep_db_query($requete_prod);

while ($print_catalog = tep_db_fetch_array($SHOW_catalog_query)) {

$print_catalog_array[$taille++] = array(

'id' => $print_catalog['products_id'],

'name' => $print_catalog['products_name'], 'description' => $print_catalog['products_description'],

'model' => $print_catalog['products_model'],

'image' => $print_catalog['products_image'],

'price' => $print_catalog['products_price'], 'specials_price' => $print_catalog['specials_new_products_price'],

'tax_class_id' => $print_catalog['products_tax_class_id'],

'date_added' => tep_date_long($print_catalog['products_date_added']),

'manufacturer' => $print_catalog['manufacturers_name']);

}

 

//recherche le nom de la categorie pere

$this->$parent_category_name='';

$this->ParentsName($current_category_level,$i,$categorieslevelsarray, $categoriesnamearray);

 

if (($current_category_level == 1) and (CATEGORIES_PAGE_SEPARATOR)) {

$this->AddPage();

$this->Ln(120);

$this->SetFont('Arial','',12);

$titles_color_table=explode(",",CENTER_TITLES_CELL_COLOR);

$this->SetFillColor($titles_color_table[0], $titles_color_table[1], $titles_color_table[2]);

$this->Cell(45,5,"",0,0);

$this->MultiCell(100,10,$current_category_name,1,'C',1);

}

 

if ($taille > 0) { // categorie non vide

$this->AddPage();

if (strlen($this->$parent_category_name) > 0 ) {

$this->TitreChapitre($this->$parent_category_name. CATEGORIES_SEPARATOR .$current_category_name);

} else {

$this->TitreChapitre($current_category_name);

}

$this->Ln(3); // NH

$this->SetFont('Arial','',11);

 

for($j=0; $j<$taille; $j++ ) {

// NH si pas d'image definie, image par default

if (strlen($print_catalog_array[$j]['image']) > 0) {

$imagepath=DIR_FS_CATALOG.DIR_WS_IMAGES.$print_catalog_array[$j]['image'];

} else {

$imagepath=DIR_FS_CATALOG.DIR_WS_IMAGES.'/'.DEFAULT_IMAGE;

}

$id=$print_catalog_array[$j]['id'];

$name=rtrim(strip_tags($print_catalog_array[$j]['name']));

$model=rtrim(strip_tags($print_catalog_array[$j]['model']));

$description=rtrim(strip_tags($print_catalog_array[$j]['description']));

$manufacturer=rtrim(strip_tags($print_catalog_array[$j]['manufacturer']));

$price=rtrim(strip_tags($print_catalog_array[$j]['price']));

$specials_price=rtrim(strip_tags($print_catalog_array[$j]['specials_price']));

$tax_class_id=rtrim(strip_tags($print_catalog_array[$j]['tax_class_id']));

$date_added=rtrim(strip_tags($print_catalog_array[$j]['date_added']));

 

$data_array=array($imagewidth,$imageheight,$name,$model,$date_added,$manufacturer,$description,$tax_class_id,$specials_price,$price,$id,$languages_code,$imagepath);

 

$this->Ln(PRODUCTS_SEPARATOR); // NH blank space before the products description cells

$this->DrawCells($data_array);

if (SHOW_INDEX) {

switch (INDEX_EXTRA_FIELD) {

case 1 : $this->PrepareIndex($name,$manufacturer,$current_category_name);

break;

case 2 : $this->PrepareIndex($name,$model,$current_category_name);

break;

case 3 : $this->PrepareIndex($name,$date_added,$current_category_name);

break;

// default : $this->PrepareIndex($name,"",$current_category_name);

default : $this->PrepareIndex($name,"","");

}

}

}

}

}

}

}

 

function NewProducts($languages_id, $languages_code)

{

$products_new_query_raw = "select p.products_id, pd.products_name, pd.products_description, p.products_image, p.products_model, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, p.products_date_added, m.manufacturers_name from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id order by p.products_date_added DESC, pd.products_name";

 

$products_new_query = tep_db_query($products_new_query_raw);

 

while($products_new = tep_db_fetch_array($products_new_query)) {

$products_new_array[] = array('id' => $products_new['products_id'],

'name' => $products_new['products_name'],

'image' => $products_new['products_image'],

'description' => $products_new['products_description'],

'model' => $products_new['products_model'],

'price' => $products_new['products_price'],

'specials_price' => $products_new['specials_new_products_price'],

'tax_class_id' => $products_new['products_tax_class_id'],

'date_added' => tep_date_long($products_new['products_date_added']),

'manufacturer' => $products_new['manufacturers_name']);

}

 

$this->AddPage();

$this->Ln(120);

$this->SetFont('Arial','',12);

$new_color_table=explode(",",NEW_CELL_COLOR);

$this->SetFillColor($new_color_table[0], $new_color_table[1], $new_color_table[2]);

$this->Cell(45,5,"",0,0);

$this->MultiCell(100,10,NEW_TITLE,1,'C',1);

$this->Ln(100);

 

//Convertion pixels -> mm

$imagewidth=SMALL_IMAGE_WIDTH*PDF_TO_MM_FACTOR;

$imageheight=SMALL_IMAGE_HEIGHT*PDF_TO_MM_FACTOR;

 

for($nb=0; $nb<MAX_DISPLAY_PRODUCTS_NEW; $nb++) {

$id=$products_new_array[$nb]['id'];

$name=rtrim(strip_tags($products_new_array[$nb]['name']));

$model=rtrim(strip_tags($products_new_array[$nb]['model']));

$description=rtrim(strip_tags($products_new_array[$nb]['description']));

$manufacturer=rtrim(strip_tags($products_new_array[$nb]['manufacturer']));

$price=rtrim(strip_tags($products_new_array[$nb]['price']));

$specials_price=rtrim(strip_tags($products_new_array[$nb]['specials_price']));

$tax_class_id=rtrim(strip_tags($products_new_array[$nb]['tax_class_id']));

$date_added=rtrim(strip_tags($products_new_array[$nb]['date_added']));

 

$imagepath=DIR_FS_CATALOG.DIR_WS_CATALOG_IMAGES.$products_new_array[$nb]['image'];

$data_array=array($imagewidth,$imageheight,$model,$name,$date_added,$manufacturer,$description,$tax_class_id,$specials_price,$price,$id,$languages_code,$imagepath);

if (!file_exists($data_array[12]))

{

$data_array[12]=DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg";

}

$this->DrawCells($data_array);

}

}

 

function TitreChapitre($lib) {

//Titre

$this->SetFont('Arial','',12);

$titles_color_table=explode(",",HIGHT_TITLES_CELL_COLOR);

$this->SetFillColor($titles_color_table[0], $titles_color_table[1], $titles_color_table[2]);

$this->Cell(0,6,$lib,$this->ifw,1,'L',1);

$this->Ln(2);

//Sauvegarde de l'ordonn?e

$this->y0=$this->GetY();

}

 

}

?>

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">

<html <?php echo HTML_PARAMS; ?>>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">

<title><?php echo TITLE; ?></title>

<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">

<script language="javascript" src="includes/general.js"></script>

</head>

<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">

<!-- header //-->

<?php require(DIR_WS_INCLUDES . 'header.php'); ?>

<!-- header_eof //-->

 

<!-- body //-->

<table border="0" width="100%" cellspacing="2" cellpadding="2">

<tr>

<td width="<?php echo BOX_WIDTH; ?>" valign="top">

<table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">

<!-- left_navigation //-->

<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>

<!-- left_navigation_eof //-->

</table>

</td>

<!-- body_text //-->

<td width="100%" valign="top">

<table border="0" width="100%" cellspacing="0" cellpadding="2">

<tr>

<td>

<table border="0" width="100%" cellspacing="0" cellpadding="0">

<tr>

<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>

<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>

</tr>

</table>

</td>

</tr>

<?php

switch ($HTTP_GET_VARS['action']) {

case 'save':

$languages = tep_get_languages();

$languages_string = '';

 

// $i=1;

for ($i=0; $i<sizeof($languages); $i++)

{

$pdf=new PDF();

$pdf->Open();

$pdf->SetDisplayMode("real");

$pdf->AliasNbPages();

if(SHOW_NEW_PRODUCTS) $pdf->NewProducts($languages[$i]['id'],$languages[$i]['code']);

$pdf->CategoriesTree($languages[$i]['id'],$languages[$i]['code']);

$pdf->CategoriesListing($languages[$i]['id'],$languages[$i]['code']);

if (SHOW_INDEX) {

$pdf->DrawIndex();

}

$pdf->Output(DIR_FS_CATALOG . DIR_WS_PDF_CATALOGS . PDF_FILENAME . "_" . $languages[$i]['id'].".pdf",false);

}

?>

<tr>

<td>

<table>

<tr>

<td class="main"><br>     <? echo PDF_GENERATED . " <font color=red>".$i. "</font>"; ?></td>

</tr>

</table>

</td>

</tr>

<?php

break;

default:

echo '<tr><td class="main"><br><br><br>     ' . PDF_PRE_GENERATED . '  ';

echo tep_draw_form('language', FILENAME_PDF_CATALOGUE, 'action=save');

echo tep_image_submit('button_save.gif', IMAGE_SAVE) . ' <a href="' . tep_href_link(FILENAME_PDF_CATALOGUE, 'lngdir=' . $HTTP_GET_VARS['lngdir']) . '">';

echo "</td></tr></form>";

}

?>

</table>

</td>

<!-- body_text_eof //-->

</tr>

</table>

<!-- body_eof //-->

 

<!-- footer //-->

<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>

<!-- footer_eof //-->

<br>

</body>

</html>

<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

Link to comment
Share on other sites

  • 2 weeks later...
Does anyone know how I can change my footer text that appears in the pdf?  Everything works fine and looks fine but I just want to edit the text at the bottom of each page. 

 

Right now it says "Put here your footer text [email protected]"

 

Hi,

 

I think I am having the same problem. Did you guys ever find an answer?

 

[email protected]

Link to comment
Share on other sites

Hi,

 

I think I am having the same problem.  Did you guys ever find an answer?

 

[email protected]

 

 

Im getting the same thing...

 

now, all of a sudden i start to get :

 

Fatal error: Call to undefined function: tep_get_languages_directory() in /home2/shopott/public_html/admin/pdf_catalogue.php on line 541

 

 

Does anyone have this running and can submit the lastest FIXED files?

Link to comment
Share on other sites

Im getting the same thing...

 

now, all of a sudden i start to get :

 

Fatal error: Call to undefined function: tep_get_languages_directory() in /home2/shopott/public_html/admin/pdf_catalogue.php on line 541

 

 

Does anyone have this running and can submit the lastest FIXED files?

 

 

Is there anyone still supporting this or os there an alternative contrib that will do the same?

Link to comment
Share on other sites

Is there anyone still supporting this or os there an alternative contrib that will do the same?

 

Search through the contributions section for 'PDF', you may find something similar ... !

 

As there seems to be a lot of interest for this contribution again, I think I will give it a second try, although this means a lot of work ... reading through the forums to see the latest different problems and browsing through the different versions of this contribution and try to combine everything in something that has as less errors as possible!

 

But all this will take some time to be done ... ! :)

 

Regards,

 

Antonios

Antonios

 

olympicslogo_en.gif

Link to comment
Share on other sites

  • 2 weeks later...

Hey, I mentioned this earlier, but this is the problem I am having. When I go to create the PDF Catalog with Image Resize being turned on (and I only have JPG's in my catalog which are in the format of '/02/2004.jpg' or '/01/1543.jpg' etc).

 

Now, my first question is, does the code automatically go to strip out any of the slashes? or is that whole '/02/2004.jpg' path being passed through to the code?

 

The errors I am recieving are the following:

 

Warning: imagecreate(): Invalid image dimensions in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 193

 

Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 194

 

Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 196

 

The lines of code it is refering to is here:

 

if($size[0] > $size[1]) {

$im=imagecreate($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]);

} else {

$im=imagecreate($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR);

imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]);

}

if(!imagejpeg($im, $destination.$array[$last-1])) {

exit();

}

 

Now, it is the 2 lines after the '} else {' lines, and the 'if(!imagejpeg...' lines that it says has the problem.

 

If I comment out those lines, I get the following errors:

 

Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206

 

Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206

 

Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206

 

Warning: imagecreate(): Invalid image dimensions in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 190

 

Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 191

 

Warning: getimagesize(c:/Inetpub/wwwroot/catalog/catalogues/1695.jpg): failed to open stream: No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_fpdf.php on line 1475

Missing or incorrect image file: c:/Inetpub/wwwroot/catalog/catalogues/1695.jpgFPDF error: Not a JPEG file: /catalog/images/pixel_trans.jpg

 

Now, the pixel_trans.jpg image does actually exist in the images/ directory, and If I copy it into the catalogues/ directory and then run the script, it deletes it from the catalogues/ directory before ending and displaying the errors.

 

Now, I am running PHP 4.3.10, on IIS 5.1 on Windows XP Professional edition.

I have the GD library installed, and this is what the 'Server_info.php' file says about GD:

 

GD Support enabled

GD Version bundled (2.0.28 compatible)

FreeType Support enabled

FreeType Linkage with freetype

GIF Read Support enabled

GIF Create Support enabled

JPG Support enabled

PNG Support enabled

WBMP Support enabled

XBM Support enabled

 

 

Any help would be GREATLY appreciated. I now have every product having an image (those that don't have an actual product image just display pixel_trans.jpg which is a 1x1 pixel white image).

 

Cheers,

Chris :)

Link to comment
Share on other sites

peteravu,

Check if that is what you are looking for ... if yes, it's not perfect but should be a good working base!

------------------------------

Hello,

I installed this script yesterday, and, after I fixed a few bugs (solution found in this forum), it works great, thank you very much.

But I'm very interested to add attributes.

I found this post about some solution, but unfortunatelly I cannot download the file. It seems like it is not there anymore. If you still have this file somewhere, could you, please post it again.

Thanks in advance

Link to comment
Share on other sites

Just setup this contribution and ironed out the tep_get_languages_directory() error and the problem with my system going to 100% cpu usage, but I guess I should have read that it doesn't support attributes (damn you 10 pages of comments :P). In any case, has anyone found a workaround for listing attributes?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...