[gelöst] drupal_render() - Problem
![](https://www.drupalcenter.de/files/imagecache/upic_mini/pictures/picture-11100.png)
am 26.07.2010 - 16:28 Uhr in
Hallo,
bastel nun gerade wie ein Weltmeister und wurde nun in meinem Fluss gebremst.
function theme_mp_reports_seller_fieldset($fieldset) {
$output = '';
$header = array(t('Seller'), t('# of orders'), t('Products sold'), t('Total revenue'), t('Total commission'), t('Payment method'), theme('table_select_header_cell'));
$rows = array();
foreach (element_children($fieldset) as $op_id) {
$row = array();
$row[] = drupal_render($fieldset[$op_id]['link']);
$row[] = drupal_render($fieldset[$op_id]['order_data']);
$row[] = drupal_render($fieldset[$op_id]['product_data']);
$row[] = drupal_render($fieldset[$op_id]['revenue_count']);
$row[] = drupal_render($fieldset[$op_id]['commission_count']);
$row[] = drupal_render($fieldset[$op_id]['payment_method']);
$row[] = drupal_render($fieldset[$op_id]['checked']);
$rows[] = $row;
}
möchte nun gerne ein Feld hinzufügen in dem ich Prozentual den Wert 'revenue_count' wiedergebe. Der haken ist -->> Es ist ein String. Jemand eine Idee?
- Anmelden oder Registrieren um Kommentare zu schreiben
Form API
am 26.07.2010 - 19:13 Uhr
Drupal bringt eine sehr leistungsfähige Form API mit, um Formulare zu erstellen. Da solltest du dich vielleicht mal umschauen: Form API Quickstart Guide
Danke für den Tipp, jedoch
am 27.07.2010 - 08:31 Uhr
Danke für den Tipp, jedoch sehe ich gerade, das ein Teil der Funktion fehlt.
Es ist kein Formular o.ä. Es ist lediglich eine Datenabfrage die mir einen wert ausgibt, in dem Fall entspricht der Wert €123.123,12 und ich fürchte selbst die Form API wird mir da nicht helfen, werde sie mir aber dennoch gleich kurz ansehen!
Da musst du glaube ich die
am 27.07.2010 - 08:49 Uhr
Da musst du glaube ich die grosse API bemühen - z.B. von php.net :-)
Formulareingaben werden soweit ich weiss immer als string behandelt. Was ist denn genau das Problem mit dem string?
Die Tatsache, das es sich mit
am 27.07.2010 - 09:19 Uhr
Die Tatsache, das es sich mit einem String schlecht rechnen lässt ;) Ich brauch x% von dem String, also erst /100 dann *x und dazu muss ich casten, denke ich aber vorher müssen die zeichen raus, damit ich nen Integer bekomme. Leider habe ich sofern ich str_replace nehme einen wundervollen weißen Screen...
ich möchte uach anmerken, auch wenn es nach einem Formular aussieht, es gibt hierzu kein Formular :) das sind die Verkaufszahlen von Ubercart bzw Ubercart_marketplace :) und diese werden lediglich 'getuned' mit der Funktion drupal_render() damit die Ausgabe hübsch aussieht
error log
am 27.07.2010 - 09:55 Uhr
Hallo.
Leider habe ich sofern ich str_replace nehme einen wundervollen weißen Screen...
Dann schau doch mal in das error-log von PHP, welcher Fehler diesen WSOD verursacht hat. Da steht das dann nämlich detailliert drin.
Stefan
der fehler ist -->> Fehler im
am 27.07.2010 - 10:15 Uhr
der fehler ist -->> Fehler im MP_reports.module in Zeile 197 das ist die stelle wo ich gerade rumbastel, und dort steht meine Funktion, die eigentlich die Zeichen die ich nicht will rausnehmen soll...
function zeichen_loschen($wert){
tmp$ = str_replace("[€,.]", "", $wert[$op_id]['revenue_count']['#value']);
return $tmp;
}
$tmp statt tmp$
am 27.07.2010 - 10:17 Uhr
tmp$
Da scheint das $ an der falschen Stelle zu stehen...
gerade auch gesehen,
am 27.07.2010 - 10:18 Uhr
gerade auch gesehen, danke
aber leider ist das nicht der fehler...zeige ich die seite an, stehen in der variable nach wie vor € , . Zeichen...
Replace
am 27.07.2010 - 10:24 Uhr
zeige ich die seite an, stehen in der variable nach wie vor € , . Zeichen...
Das ist auch kein Wunder, da Du nach der Zeichenkette "[€,.]" suchst und str_replace anweist, exakt diese Zeichenkette zu ersetzen.
Du möchtest Folgendes verwenden:
<?php
$mp = str_replace(array('€', ',', '.'), '', $wert[$op_id]['revenue_count']['#value']);
?>
hth,
Stefan
leider kommt bei deinem
am 27.07.2010 - 10:39 Uhr
leider kommt bei deinem str_replace folgender error :(
[27-Jul-2010 11:38:27] PHP Fatal error: Cannot use string offset as an array in [...] on line 197
Ubercart Views?
am 27.07.2010 - 12:16 Uhr
Ginge das nicht vielleicht besser damit: http://drupalmodules.com/module/ubercart-views ?
Nimmst du das
am 27.07.2010 - 12:44 Uhr
<?php
$wert = '€123.123,12';
$wegdamit = array("€", ".", ",");
$tmp = str_replace($wegdamit, "", $wert);
print $tmp;
?>
ich danke dir Luzer :)
am 27.07.2010 - 13:54 Uhr
ich danke dir Luzer :) Naheliegende und einfach lösungen sind meist die besten :) das läuft ;) nun noch das problem des Typecast aber naja... bin erstmal gelähmt... denn das uc_Views Modul soll wohl können was ich möchte, jedoch hat sich gerade mein Server entschlossen auf 32M memory_limit trotz änderungen zu beharren.. naja mal sehen was Host-Europe so sagt ;)
Bitte mal Screenshot
am 27.07.2010 - 15:00 Uhr
wenn's fertig ist ;-)
leider ist es immernoch nicht
am 27.07.2010 - 15:07 Uhr
leider ist es immernoch nicht gelöst worden mit dem memory limit problem, solange kann ich leider nicht weiter arbeiten ;) aber zumindest klappt das rausnehmen der Zeichen, wobei bei der ausgabe das € zeichen wieder da ist, und zuletzt hat der typecast nicht funktioniert, denke mal WEGEN dem e zeichen es gab immer den wert 1 aus
Probiere mal
am 27.07.2010 - 15:22 Uhr
<?php
$var = '122.34343The';
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 122.34343
?>
aus der PHP-Doc - formatiert beliebige Daten (nur keine Array/Objekt) in ein FLOAT. Währungszeichen und Punkte werde ignoriert.
Gruß
UwBach
ich danke dir, aber leider
am 27.07.2010 - 15:24 Uhr
ich danke dir, aber leider scheint mit dem Wert irgendwas nicht zu stimmen, tippe mal darauf das es ein objekt ist. denn ich erhalte nach dem funktionsaufruf von floatval() lediglich eine 0
trotzdem danke :) ich werde es hoffentlich bald schaffen
Dann so..
am 27.07.2010 - 15:36 Uhr
<?php
$var = '€123.123,12';
// Entfernen des €
$var = str_replace('€', '', $var);
// Entfernen der Dezimalstellen-Punkte
$var = str_replace('.', '', $var);
// Setzen auf Numberformat
$var = str_replace(',', '.', $var);
$float_value_of_var = floatval($var);
echo $float_value_of_var; // 123123.12
?>
Gruß
UwBach
Nur der Vollständigkeit halber
am 27.07.2010 - 16:52 Uhr
PHP Manual: "String conversion to numbers"
Soooo :) Zumindest offline
am 28.07.2010 - 13:52 Uhr
Soooo :)
Zumindest offline geht es nun einwandfrei ;) leider gibt es dort im moment auch nur einen benutzer, aber ich habe das problem mittlerweile ausfindiggemacht. Nachdem Aufruf von $fieldset[$op_id]['revenue_count']['#values'] füllt sich meine Variable $wert mit x Werten (x entspricht der Anzahl aller befugten Nutzer [$seller -> uid]) und da liegt der hund begraben, ich habe derzeit nicht den hauch einer idee, wie ich nun die Werte seopariere und dann weider zurück gebe. Denn es stehen leider exakt soviele Strings in der Variablen, wie ich authorisierte Nutzer habe.
PHP split()?
am 28.07.2010 - 18:09 Uhr
http://php.net/manual/de/function.split.php
Fertig
am 29.07.2010 - 11:34 Uhr
so Banal es letzten endes auch war, es ist gelöst!
Hier die Gebühren-Anzeige für den Admin:
function theme_mp_reports_seller_fieldset($fieldset) {
$output = '';
$header = array(t('Seller'), t('# of orders'), t('Products sold'), t('Total revenue'), t('Selling Fee'),t('Payment method'), theme('table_select_header_cell'));
$rows = array();
$zeichen = '€';
foreach (element_children($fieldset) as $op_id) {
$inhalt = $fieldset[$op_id]['revenue_count']['#value'];
$inhalt = str_replace('.','',$inhalt);
$inhalt = str_replace(',','.',$inhalt);
$inhalt = floatval($inhalt);
$inhalt = $inhalt / 100;
$inhalt = $inhalt *7; // % Verkaufsgebühr
$inhalt = number_format($inhalt, 2, ',','.'); // Nummer auf Format bringen, 2 Nachkomma stellen, ',' als DezimalTrennzeichen und der '.' Tausendernder trennzeichen
$row = array();
$row[] = drupal_render($fieldset[$op_id]['link']);
$row[] = drupal_render($fieldset[$op_id]['order_data']);
$row[] = drupal_render($fieldset[$op_id]['product_data']);
$row[] = drupal_render($fieldset[$op_id]['revenue_count']);
$row[] = $inhalt.' '.$zeichen; // Ausgabe im Format 123.123,59 €
$row[] = drupal_render($fieldset[$op_id]['payment_method']);
$row[] = drupal_render($fieldset[$op_id]['checked']);
$rows[] = $row;
}
$output .= theme('table', $header, $rows);
//$output .= drupal_render($fieldset); // Aus Gründen die mir nicht bekannt sind, gibt es hier nochmal alle Werte unformatiert aus.
return $output;
}
und hier noch der Seller Report für jeden Seller:
// Build the header statistics table header.
$header = array(array('data' => t('Statistics'), 'width' => '50%'), '');
$rows = array(
array(array('data' => t('Grand total sales')), array('data' => uc_currency_format(db_result(db_query("SELECT SUM(p.cost * p.qty) FROM {mp_seller_order_statuses} AS sos LEFT JOIN {uc_orders} AS o ON sos.order_id = o.order_id LEFT JOIN {uc_order_products} AS p ON p.order_id = o.order_id LEFT JOIN {node} AS n ON n.nid = p.nid WHERE sos.order_status IN $order_statuses AND n.uid = %d AND sos.uid = %d", $uid, $uid))))),
);
$rows[] = array(
t('Selling Fee for @date', array('@date' => $month_title)), // Anzeige der Gebühr
uc_currency_format(round((($month['income'] /100)*7),2)) // Berechnung der Gebühr, im Moment 7% des Gesamtumsatzes
);