Files sortieren
am 13.12.2007 - 14:37 Uhr in
Hi Leute!
Ich würde gerne per Upload verschiedene Dateien an eine Node ranhängen und diese dann in eigenen Blocks jeweils nach Dateityp sortiert auflisten.
Das Auslagern der Dateianhänge in einen Block hab ich schon per Views und Block-Skript gelöst
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
print theme('upload_attachments', $node->files, true);
}
?>Aber wie müsste ich das Skript erweitern, um nur bestimmte Dateitypen in der Auflistung zu erlauben?
Danke!
- Anmelden oder Registrieren um Kommentare zu schreiben

ist das zu schwierig?
am 16.12.2007 - 15:57 Uhr
ist das zu schwierig?
Was ist das Problem? Mache
am 16.12.2007 - 16:19 Uhr
Was ist das Problem?
Mache mal ein print $node->files bzw. print_r($node->files). Falls Du damit nichts anfangen kannst poste die Ausgabe print $node->files bzw. print_r($node->files).
Hat es klick gemacht?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
sowas?
am 17.12.2007 - 14:40 Uhr
sowas?
<?phpif (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
$Node_Files = $node->files;
foreach ($Node_Files as $filename){
if(array_key_exists(".mp3", $filename){
echo 'mp3';
}
}
}
?>
bin fast da...
am 17.12.2007 - 16:20 Uhr
so krieg ich ne liste der dateianhänge, allerdings nicht verlinkt usw.
<?phpif (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
$Node_Files = $node->files;
foreach ($Node_Files as $Subarray){
foreach ($Subarray as $key => $value){
if ($key == "filename"){
echo $value."<br>";
#print theme('upload_attachments', $node->files, true);
}
}
}
}
?>
wie kann ich hiermit jetzt bestimmte filetypen ausschließen und dann mit der funktion print_theme ausgeben?
Indem du vor der Übergabe
am 17.12.2007 - 17:03 Uhr
Indem du vor der Übergabe an die Theming-Funktion die Dateinamen auf die enthaltenen Dateiendungen prüfst und nur die gewünschten Dateien themen und den Rest unter den Tisch fallen lässt.
--
"Look, Ma, I'm dead!"
Cell, Stephen King
schon klar. hab mich
am 19.12.2007 - 13:12 Uhr
schon klar. hab mich missverständlich ausgedrückt. nochmal:
beim aufruf
<?phpprint theme('upload_attachments', $node->files, true);
?>
übergebe ich ja das subarray "$node->files", das in bestimmmter art formatiert ist und von der funktion print theme verarbeitet werden kann. in dieser formatierung müsste ich dann ja wohl auch die aussortierten files in einem gleichartigen array übergeben, z. b. als $files_sorted.
nehmen wir an, ich durchsuche "$Node_Files = $node->files;" nach anhängen mit der endung ".zip", dann könnte ich alle gefundenen arrays in ein eigens hierfür erstelltes array "$Found_Files = array();" schieben und dieses dann an die funktion übergeben?
<?phpprint theme('upload_attachments', $Found_Files, true);
?>
ich dachte so <?phpif
am 19.12.2007 - 13:36 Uhr
ich dachte so
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
$Node_Files = $node->files;
$Found_Files = array();
foreach ($Node_Files as $Subarray){
foreach ($Subarray as $key => $value){
if ($key == "filename"){
if ($searchkey = array_search(".mp3", $Subarray)){
array_push($Found_Files, $Subarray);
}
}
}
}
#print theme('upload_attachments', $Found_Files, true);
}
?>
bekomme aber immer ne Fehlermeldung
warning: array_search() [function.array-search]: Wrong datatype for second argument in second argument inNimm die den Code von
am 19.12.2007 - 14:30 Uhr
Nimm die den Code von theme_upload_attachments() als Vorbild
<?phpfunction theme_upload_attachments($files) {
$header = array(t('Attachment'), t('Size'));
$rows = array();
foreach ($files as $file) {
$file = (object)$file;
if ($file->list && !$file->remove) {
// Generate valid URL for both existing attachments and preview of new attachments (these have 'upload' in fid)
$href = file_create_url((strpos($file->fid, 'upload') === FALSE ? $file->filepath : file_create_filename($file->filename, file_create_path())));
$text = $file->description ? $file->description : $file->filename;
$rows[] = array(l($text, $href), format_size($file->filesize));
}
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>
fuer Deinen eigene Code.
Du kannst $node->files NICHT ohne weiteres in eine Schleife packen. $node->files ist KEIN Array sondern ein Objekt.
Um es trotzdem tun zu koennen beachte den Code voran mit
<?phpforeach ($files as $file) {
$file = (object)$file;
?>
Unabhangig vom bereits existierenden Problem mit dem Objekt. Du kannst mit array_push ein weiters Problem bekommen. Und zwar dann wenn nur 1 Datei hochgeladen wurde. Dann bringt array_push einen PHP Error. Alternativ ist array_pop besser.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
dann könnte ich diese
am 19.12.2007 - 16:03 Uhr
dann könnte ich diese funktion doch eigentlich auch gleich in die template.php packen und etwas umschreiben, so dass z.b. alle files ausser files der endung ".mp3" gelistet werden, oder?
dann kann ich mir das sortieren im block auch sparen.
oder?
ich habe nun folgendes im template.php:
<?php
function garland_upload_attachments($files, $in_block = false) {
if (!$in_block) {
return;
}
$header = array(t('Attachment'), t('Size'));
$rows = array();
foreach ($files as $file) {
if ($file->list) {
$File_xplode = explode(".", $file->filename);
$File_Type = $File_xplode[1];
if ($File_Type != "mp3") {
$href = $file->fid ? file_create_url($file->filepath) : url(file_create_filename($file->filename, file_create_path()));
$text = $file->description ? $file->description : $file->filename;
$rows[] = array(l($text, $href), format_size($file->filesize));
}
}
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>
und das funktioniert sogar. siehst du da irgendwelche möglichen probleme (bis auf case sesitivität)?
danke!
So gedacht
am 19.12.2007 - 17:52 Uhr
dann könnte ich diese funktion doch eigentlich auch gleich in die template.php packen und etwas umschreiben
Genau so ist das gedacht mit den Theme-Funktionen.
und das funktioniert sogar.
So soll es sein :)