Imprimer cette page
samedi, 23 avril 2022 09:15

Importer dans un tableau html Joomla un fichier csv en ligne

Écrit par
Évaluer cet élément
(0 Votes)

Quoi ? tu nous parles sans arrêt de données en opendata, tu développes en Joomla et t'es même pas fichu de conciler les deux ?

Alors oui je vous entends d'ici et j'ai bien l'intention de concilier les deux. Voila mon premier module que j'ai voulu simple pour voir ce que ca pouvais donner. Bien qu'il ne soit pas entièrement complet par rapport à ce que je voudrais, il est fonctionnel coté serveur. Il faudrait que je rajoute une petite coucher JQuery, j'ai vu des plugins sympa comme tablesort mais je suis pas expert JQuery pour l'implémeter. Il faudrait que je m'y colle sérieusement.

ici, ce module permet d'afficher dans un tableau, le contenu de d'un fichier distant CSV en ligne. Vous verrez dans le nom du fichier CSV un numéro. C'est en fait l'ID du module. Il sert à identifier de manière unique LE SEUL ET UNIQUE module (et donc données du module). Ainsi vous pouvez spécifier des styles spécifiques par tableau. Je m'en sers ici pour masquer des "colonnes" de données qui sont présentes dans la source de données mais que je ne vaus pas voir afficher. C'est beaucoup plus simple que de rajouter de long traitement php (j'ai essayé) permettant de ne pas afficher des colonnes. En effet, je suis vite tombé sur des timeouts !

index.html

<html> 
<head> 
</head> 
<body> 
</body> 
</html> 

helper.php

<?php
	class mod_importcsv{
		public static function getimportcsv($params,$monid){
				$document = JFactory::getDocument()->addStyleSheet('modules/mod_importCSV/style-'.$monid.'.css');
				$fichier = $params->get("importedfile");			
				$document = JFactory::getDocument();				
				$row = 1;
				if (($handle = fopen($params->get("importedfile"), "r")) !== FALSE) {
					echo '<table border="1" id="tableau-'.$monid.'">'; //le luis colle l'>I>D du module pour l'identifier dans le CSS
					echo '<caption>'.$params->get("titre").'</caption>';
				  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
					$num = count($data);
						if($row==1)
						{
							echo "<th>";
						}
						else{
							echo "<tr>";
						}
						for ($c=0; $c < $num; $c++) {
							$ligne = $data[$c] . "<br />\n";
							$a= explode(';',$ligne);
							$coll=1;
							foreach($a as $cell)
							{

								echo '<td>'.$cell.'</td>';
								$coll++;
							}
							
						}
					if($row==1)
						{
							echo "</th>";
						}
						else{
							echo "</tr>";
						}
					
					$row++;
				  }
				  echo "</table>";
				  fclose($handle);
                       }			

		}
	}
?>

mod_importcsv.php

<?php	
	defined('_JEXEC') or die;
	require_once dirname(__FILE__).'/helper.php';
	JLoader::register('mod_importcsv', __DIR__ . '/helper.php');
	$hello = mod_importcsv::getimportcsv($params,$module->id);

mod_importcsv.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
<name>Import CSV</name>
<author>sebastien lhuillier</author>
<version>1.0.0</version>
<description>Module Important un fichier CSV.</description>
	<files>
		<filename>mod_importcsv.xml</filename>
		<filename module = "mod_importcsv">mod_importcsv.php</filename>
		<filename>index.html</filename>
		<filename>helper.php</filename>
		<filename>tmpl/default.php</filename>
	</files>
	<config>
	<fields name="params">
			<fieldset name="basic">		
				<field name="titre" type="text" default="" label="Nom du tableau" description="" size="10" />
				<field name="importedfile" type="url" default="" label="URL du csv à afficher" description="" size="10" />
				<field name="note13" type="note" label="Note" description="Utiliser la classe CSS spécifique du tag &lt; table &gt; pour masquer une colonne dans votre CSS personnalisé 'style-xxx' où xxx est le n° du module. Le fichier css doit se trouver dans le dossier du module." />
			</fieldset>
		</fields>
	</config>
</extension>

tmpl/index.html

<html> 
<head> 
</head> 
<body> 
</body> 
</html> 

tmpl/default.php

<?php
	defined('_JEXEC') or die;
?>

style-499.css

#tableau-499 tbody tr td:nth-child(2) {
    display: none;
}

#tableau-499 tbody tr th:nth-child(2) {
    display: none;
}
Lu 747 fois