Node Pane: Kleine PHP-Anpassung (Sortierung der Content Types)
am 09.11.2014 - 09:19 Uhr in
Ich grüße!
Das Modul Node Pane von floretan erzeugt in Panels für jeden Content Type einen entsprechenden Link: "New Article", "New Person", etc. der dann direkt in eine PanelPane eingefügt wird.
Die Reihenfolge, in der die Content Types in Panels dann aufgelistet werden richten sich scheinbar nach den maschinenlesbaren Namen der Content Types. Da ich die Reihenfolge jedoch manuell anpassen möchte, dachte ich mir wäre eine Sortierung nach dem menschenlesbaren Namen sinnvoll, da ich diese auch ändern kann.
Im Modul wird die Funktion node_type_get_types() aufgerufen, welche folgendes ausgibt (Inhaltstypen: Text und Image):
array(20) {
["text"]=>
object(stdClass)#140 (14) {
["type"]=>
string(4) "text"
["name"]=>
string(4) "Text"
["base"]=>
string(12) "node_content"
["module"]=>
string(33) "feature_drupal_blueprint_ct_lines"
["description"]=>
string(0) ""
["help"]=>
string(0) ""
["has_title"]=>
string(1) "1"
["title_label"]=>
string(14) "Internal Title"
["custom"]=>
string(1) "0"
["modified"]=>
string(1) "1"
["locked"]=>
string(1) "1"
["disabled"]=>
bool(false)
["orig_type"]=>
string(4) "text"
["disabled_changed"]=>
bool(false)
}
["image"]=>
object(stdClass)#128 (14) {
["type"]=>
string(5) "image"
["name"]=>
string(7) "A Image"
["base"]=>
string(12) "node_content"
["module"]=>
string(33) "feature_drupal_blueprint_ct_image"
["description"]=>
string(0) ""
["help"]=>
string(0) ""
["has_title"]=>
string(1) "1"
["title_label"]=>
string(14) "Internal Title"
["custom"]=>
string(1) "0"
["modified"]=>
string(1) "1"
["locked"]=>
string(1) "1"
["disabled"]=>
bool(false)
["orig_type"]=>
string(5) "image"
["disabled_changed"]=>
bool(false)
}
}
Der CodeSchnipsel sieht nun folgendermaßen aus:
<?php
function ctools_node_content_type_content_types($plugin) {
$ctools_content_types = array();
foreach(node_type_get_types() as $name => $node_type) {
$ctools_content_types[$name] = array(
'title' => t('New @type', array('@type' => $node_type->name)),
'description' => $node_type->description,
'category' => array(t('Content')),
'top level' => TRUE,
'add form' => array(
'ctools_node_content_type_add_form' => t('Add new @type', array('@type' => $node_type->name)),
'ctools_node_content_type_edit_form' => array(
'default' => TRUE, // put wrapper here, not on the previous form.
'title' => t('Configure display'),
),
),
'edit form' => 'ctools_node_content_type_edit_form',
);
}
?>
Was kann ich nun unternehmen, um in der foreach-schleife nach den Inhalten von "["name"]=> ... " aus node_type_get_types() zu sortieren?
Einen wunderschönsten Sonntag,
SE64!
- Anmelden oder Registrieren um Kommentare zu schreiben
Du willst doch nicht bestehende Module ändern?
am 09.11.2014 - 10:58 Uhr
Wie gut kennst du mittlerweile Drupal?
Für selektion und Sortierung bist du am besten bei views aufgehoben.
Den Code bestehender Module ändert man niemals.
Wenn du es besser kannst, schreibe dein eigenes Modul.
Du kannst natürlich Verbesserungsvorschläge an die Entwickler des Moduls richten.
Wenn du ein Modul selbst änderst, ist das nicht mehr wartbar. Bei jeder Aktualisierung kann es dir deine Änderungen wieder überschreiben.
Es gibt viele Möglichkeiten, die Ergebnisse zu überschreiben.
Grüße
Ronald
Mit Drupal arbeite ich ca.
am 09.11.2014 - 16:51 Uhr
Mit Drupal arbeite ich ca. seit 3 Jahren. Allerdings nur im Frontend - nichts im Backend.
Auch sind meine PHP-Skills noch recht mager.
Ich weiß das man Modul eig. nicht ändert - gibts aber keine andere Möglichkeit, werd ichs tun. Im übrigen machen Patches doch das gleiche?
Ob ich da mit ksort(); weiter komme? Ich bin aufgeschmissen... ^-^.
Zur not positioniere ich die alle absolut und verschiebe so deren Reihenfolge. Auch ne Option..
Gruß,
SE64
ich sehe nicht ganz, was du hier vor hast
am 09.11.2014 - 18:38 Uhr
aber soweit ich es verstanden habe, ist views genau das, was du hier brauchst.
Mit rudementären PHP-Kenntnissen in Modulen zu fummeln, ist schon mutig.
Grüße
Ronald
Kein Grund aufzugeben *g. Ich
am 10.11.2014 - 10:29 Uhr
Kein Grund aufzugeben *g. Ich denke mit Views komm ich da nicht weiter. *sicher bin*
Das Sortieren klapp jetzt:
<?php
function cmp($a, $b) {
return strcmp($a->name, $b->name);
}
$types_sortiert = node_type_get_types();
usort($types_sortiert, "cmp");
?>
Rufe ich $types_sortiert mit var_dump(); auf, sehe ich meine Sortierung.
Das Problem ist nun - $types kann ich scheinbar nicht in die foreach schleife einbauen. Denn da erhalte ich keine Ergebnisse mehr:
<?php
function ctools_node_content_type_content_types($plugin) {
$ctools_content_types = array();
/* HIER WURDE node_type_get_types() DURCH $types ERSETZT. */
foreach($types as $name => $node_type) {
$ctools_content_types[$name] = array(
'title' => t('New @type', array('@type' => $node_type->name)),
'description' => $node_type->description,
'category' => array(t('Content')),
'top level' => TRUE,
'add form' => array(
'ctools_node_content_type_add_form' => t('Add new @type', array('@type' => $node_type->name)),
'ctools_node_content_type_edit_form' => array(
'default' => TRUE, // put wrapper here, not on the previous form.
'title' => t('Configure display'),
),
),
'edit form' => 'ctools_node_content_type_edit_form',
);
}
?>
Hast du da eine Idee was ich falsch mache?
Gruß und Danke,
SE64