By default, for excel5 compatibility, writeexcel limit cells max size to 255 characters. You can increase it to 32767 by modifying the strmax parameter in the class.writeexcel_worksheet.inc.php line 116.
$strmax = 32767;
By default, for excel5 compatibility, writeexcel limit cells max size to 255 characters. You can increase it to 32767 by modifying the strmax parameter in the class.writeexcel_worksheet.inc.php line 116.
$strmax = 32767;
If you are installing a symfony 1.x project on a PHP 5.4.1 (or later) version, you may encounter this warning message :
Warning: ob_start(): function ” not found or invalid function name in /var/www/lib/config/sfApplicationConfiguration.class.php on line 157 Notice: ob_start(): failed to create buffer in /var/www/lib/config/sfApplicationConfiguration.class.php on line 157
To fix it, go on your /lib/config/sfApplicationConfiguration.class.php file and change this
// compress output
if (!self::$coreLoaded)
{
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');
}
to this
// compress output
if (!self::$coreLoaded)
{
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null);
}
Here my array structure :
Array
(
[33] => Array
(
[id_site] => 33
[datas] => Array
(
[id] => 2965
[site_id] => 33
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0119
)
[32] => Array
(
[id_site] => 32
[datas] => Array
(
[id] => 1929
[site_id] => 32
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0114
)
[34] => Array
(
[id_site] => 34
[datas] => Array
(
[id] => 2230
[site_id] => 34
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0128
)
)
How to sort by the [sort] value inside my array ?
I have to use the usort() function :
function sortByCustom($a, $b) {
return strcmp($a['sort'], $b['sort']);
}
...
usort($array, 'sortByCustom');
Here the result :
Array
(
[0] => Array
(
[id_site] => 32
[datas] => Array
(
[id] => 1929
[site_id] => 32
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0114
)
[1] => Array
(
[id_site] => 33
[datas] => Array
(
[id] => 2965
[site_id] => 33
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0119
)
[2] => Array
(
[id_site] => 34
[datas] => Array
(
[id] => 2230
[site_id] => 34
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0128
)
)
If you want to maintain the index value association, use the uasort() function
uasort($array, 'sortByCustom');
Here the result :
Array
(
[32] => Array
(
[id_site] => 32
[datas] => Array
(
[id] => 1929
[site_id] => 32
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0114
)
[33] => Array
(
[id_site] => 33
[datas] => Array
(
[id] => 2965
[site_id] => 33
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0119
)
[34] => Array
(
[id_site] => 34
[datas] => Array
(
[id] => 2230
[site_id] => 34
[operation_id] => 20
[positionnement] => 1
)
[statut] => Validé DM
[sort] => 0128
)
)
If you use this in a class, you have to define the sort function outside the class
<?php
function sortByCustom($a, $b)
{
return strcmp($a['sort'], $b['sort']);
}
class positionnemen {
...
for strict number comparaison, you can also use this function
function sortByCustom($a, $b)
{
if($a['nbr'] > $b['nbr'])
{
return 1;
}
return -1;
}
Here an easy way to add page number at the end of a fpdf document
In your fpdf class, before calling addpage(), call the AliasNbPages() fonction
$this->AliasNbPages();
then create a footer() fonction to override the default empty footer
function Footer()
{
$this->SetY(-10);
$this->SetFont('Arial', '', 8);
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}', 0, 0, 'C');
$this->SetY(-10);
$this->Cell(0,10,"date d'impression: ".date('d/m/Y'), 0, 0, 'R');
}
The complete class : file pdfListeDemandes.class.php
<?php
class pdfListeDemandes extends FPDF
{
function init()
{
$this->AliasNbPages();
...
}
function writeListe()
{
$this->init();
...
}
function Footer()
{
$this->SetY(-10);
$this->SetFont('Arial', '', 8);
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}', 0, 0, 'C');
$this->SetY(-10);
$this->Cell(0,10,"date d'impression: ".date('d/m/Y'), 0, 0, 'R');
}
}
And the code to call your class
$pdf = new pdfListeDemandes();
$pdf->writeListe();
$pdf->output('Liste_demande.pdf', 'D');
exit;
To format a date from a doctrine object, you can use this code, quick and easy.
$demande->getDateTimeObject('date_creation')->format('d/m/Y');
Sometimes, this first solution return current date even if the doctrine record is null.
You then have to use this other solution
use_helper('Date');
format_date($demande->getDateCreation(), 'dd-MM-yyyy');
You can found format rules here
In your form class (lib/form/doctrine/classForm.class.php)
$this->validatorSchema->setPostValidator(
new sfValidatorMultiFields(
array('field1', 'field2', 'field3'),
array('labels' => array('name1', 'name2', 'name3')),
array('global_invalid' => 'Multi fields error')));
save this class in a lib folder, for exemple apps/frontend/lib/sfValidatorMultiFields.class.php
<?
class sfValidatorMultiFields extends sfValidatorSchema
{
public function __construct(array $fields, $options = array(), $messages = array())
{
$this->addOption('fields', $fields);
$this->addMessage('invalid', 'Error with this field');
$this->addMessage('global_invalid', 'Multi fields error');
parent::__construct(null, $options, $messages);
}
protected function doClean($values)
{
$valid = false;
foreach ($this->getOption('fields') as $field) {
//put here your validation code
// ex: $values[$field] ....
}
//another example, at least one field in not empty
if($values['field1'] != '' || $values['field2'] != '' || $values['field3'] != '')
{
$valid = true;
}
if ($valid)
{
$errorSchema = new sfValidatorErrorSchema($this);
// The global error
$errorSchema->addError(new sfValidatorError($this, 'global_invalid', array()));
}
// Fields error
$error = new sfValidatorError($this, 'invalid', array()));
// Add the error for each defined fields
foreach ($this->getOption('fields') as $field)
{
$errorSchema->addError($error, $field);
}
throw $errorSchema;
}
return $values;
}
}
?>
The keys points are :
– use $this->validatorSchema->setPostValidator() in your form class
– all fields are now available from the $values array ($values[‘field1′], $values[‘field2′] …)
Here, a simple script to unzip a .zip file in php without the 1024 characters limitations
function unzip($zip, $root, $target_folder = "")
{
$zip_file = zip_open($root . $zip);
while ($zip = zip_read($zip_file))
{
$zip_object = zip_entry_name($zip);
if (!is_dir(dirname($root . $target_folder . $zip_object)))
{
mkdir(dirname($root . $target_folder . $zip_object), 0777, true);
}
$hedef_doc = $root . $target_folder . $zip_object;
if(substr($hedef_doc, -1) != "/")
{
touch($hedef_doc);
$target_file = fopen($hedef_doc, 'w');
$size = 0;
while($size < zip_entry_filesize($zip))
{
fwrite($target_file, zip_entry_read($zip));
$size += 1024;
}
fclose($target_file);
}
}
return true;
}
unzip("file.zip", "./", "target_directory");