Rubrikname - Artikel verschieben

Diskussion von Ideen oder Anregungen zu ConPresso und zur Community
Antworten
stefann
ConPresso-User
Beiträge: 34
Registriert: 31.07.2006 09:33
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

Rubrikname - Artikel verschieben

Beitrag von stefann »

Nur mal so, was mich schon länger stört und wohl relativ leicht zu ändern wäre:

Mir ging es schon öfter so das ich bei größeren CP-Projekten Rubriken mit mehrfach gleichem Namen habe. Wenn ich nun einen Artikel verschiebe erscheinen im Pulldown nur die Rubrik-Namen. Viel besser wäre es wenn dort aber der vollständige Rubrik-Pfad (wie in der Titel-Navigation) zu sehen wäre. Sonst muss ich immer ins blau hinhein auswählen, probieren und hoffen die richtige Rubrik zu erwischen! Schön wäre auch wenn es zu dem Button "Artikel verschieben" noch einen ähnlichen Button gebe wie "Artikel verschieben & in Rubrik springen". Spart oftmals viel Zeit, vor allem bei größeren Rubrikstrukturen.


Gleiches Problem mit dem Rubriknamen gibt es auch bei:
Artikel bearbeiten->HTML (popup)
wenn man eine Rubrik als Link auswählen will

Navigation bearbeiten:
bei Rubrik-Zuordnung

Grüße
Stefan
Benutzeravatar
baluo
ConPresso-Experte
Beiträge: 607
Registriert: 14.11.2005 12:17
Hat sich bedankt: 216 Mal
Danksagung erhalten: 11 Mal

Re: Rubrikname - Artikel verschieben

Beitrag von baluo »

stefann hat geschrieben:Mir ging es schon öfter so das ich bei größeren CP-Projekten Rubriken mit mehrfach gleichem Namen habe. Wenn ich nun einen Artikel verschiebe erscheinen im Pulldown nur die Rubrik-Namen. Viel besser wäre es wenn dort aber der vollständige Rubrik-Pfad (wie in der Titel-Navigation) zu sehen wäre.
Ich habe das bisher nach der Struktur der Navigation geloest:
Rubrik A
> Rubrik AA
>> Rubrik AAA
Rubrik B
...

Daraus gewinne ich fuer die Rubrik der dritten Ebene diese Rubrik-Bezeichnung: "A_AA_AAA"

z.B.
A = wir
AA = wir_kontakt
AAA = wir_kontakt_wegbeschreibung

Damit werden die Rubriken in den Auswahlfeldern auch korrekt sortiert.

Gruss, Gerhard
stefann
ConPresso-User
Beiträge: 34
Registriert: 31.07.2006 09:33
Hat sich bedankt: 4 Mal
Danksagung erhalten: 4 Mal

Beitrag von stefann »

Hab deinen Tip leider zu spät gelesen! ;) Trtozdem danke! Ich hatte mich am wochenende dran gemacht und die Selectbox beim Artikel verschieben angepasst. Hab mir den entsprechenden Code aus der Titelnavigation geklaut...

Eigentlich recht unkompliziert... Einfach die Datei ./_admin/articles.php öffnen.

Suche:

Code: Alles auswählen

case 'move': // {{{
        require(CPO_BASEDIR.'_include/header.php');

        $db = new DB;

        $query = "SELECT titel "
                ."FROM ".CPO_NEWS." "
                ."WHERE nr='".addslashes($_POST['nr'])."'";
        $db->query($query);
        $db->next_record();
        $titel = $db->v('titel');

        printPageHeader(
            ___('Move article'),
            sprintf(___('In this view you can move the article %s into another rubric. If the used article-template is not allowed in the new rubric, the standard template of the new rubric will be used.'),
                '<em>'.htmlspecialchars($titel).'</em>'
            ),
            'articles-listarticles.html#articles-listarticles-movearticle'
        );
        ?>

        <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
        <input type="hidden" name="action" value="articles_moveto">
        <input type="hidden" name="nr" value="<?php echo htmlspecialchars($_POST['nr']); ?>">

        <table class="colored" style="width: 100%;"><thead>
            <tr>
                <th colspan="2"><span><?php echo ___('Article'); ?></span></th>
            </tr>
        </thead><tbody>
            <tr>
                <td class="leftrow"><?php echo ___('Article:'); ?></td>
                <td class="rightrow">
                    <?php echo htmlspecialchars($titel); ?>
                </td>
            </tr>
            <tr>
                <td><?php echo ___('Move article into rubric:'); ?></td>
                <td>
                    <?php
                    $query = "SELECT rubric_id, name "
                            ."FROM ".CPO_RUBRIC.", ".CPO_PERMISSION." "
                            .'WHERE rubric_id='.CPO_RUBRIC.'.id '
                            ."AND rubric_id!='".addslashes($_SESSION['SID_rubric_id'])."' "
                            .'AND (stufe1=1 OR stufe2=1) '
                            .'AND user_id='.(int)$_SESSION['SID_user']['id'].' '
                            ."ORDER BY name";
                    $db->query($query);

                    print('<select name="move_target" size="1">');
                    while($db->next_record()) {
                        printf('<option value="%s">%s</option>',
                            htmlspecialchars($db->v('rubric_id')),
                            htmlspecialchars($db->v('name'))
                        );
                    }
                    print('</select>');
                    print(help('articles-listarticles.html#articles-listarticles-movearticle-rubric')); 
                    ?>
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <?php 
                    echo '<input type="submit" class="button" value="'.___('move article').'">&nbsp;'; 
                    echo '<input type="submit" name="cancel" class="button" value="'.___('cancel').'">';
                    echo '</form>';
                    ?>
                </td>
            </tr>
        </table>
        <?php

        require(CPO_BASEDIR.'_include/footer.php');
        break; // }}}
ersetzte mit:

Code: Alles auswählen

case 'move': // {{{
        require(CPO_BASEDIR.'_include/header.php');

        $db = new DB;

        $query = "SELECT titel "
                ."FROM ".CPO_NEWS." "
                ."WHERE nr='".addslashes($_POST['nr'])."'";
        $db->query($query);
        $db->next_record();
        $titel = $db->v('titel');

        printPageHeader(
            ___('Move article'),
            sprintf(___('In this view you can move the article %s into another rubric. If the used article-template is not allowed in the new rubric, the standard template of the new rubric will be used.'),
                '<em>'.htmlspecialchars($titel).'</em>'
            ),
            'articles-listarticles.html#articles-listarticles-movearticle'
        );
        ?>

        <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
        <input type="hidden" name="action" value="articles_moveto">
        <input type="hidden" name="nr" value="<?php echo htmlspecialchars($_POST['nr']); ?>">

        <table class="colored" style="width: 100%;"><thead>
            <tr>
                <th colspan="2"><span><?php echo ___('Article'); ?></span></th>
            </tr>
        </thead><tbody>
            <tr>
                <td class="leftrow"><?php echo ___('Article:'); ?></td>
                <td class="rightrow">
                    <?php echo htmlspecialchars($titel); ?>
                </td>
            </tr>
            <tr>
                <td><?php echo ___('Move article into rubric:'); ?></td>
                <td>
                    <?php
                   
							print('<select name="move_target" size="1">');
							// fetch all rubrics this user has access to
							$query = 'SELECT rubric_id '
							      .'FROM '.CPO_PERMISSION.' '
							      ."WHERE user_id='".addslashes($_SESSION['SID_user']['id'])."' ";
							DEBUG(1, $query, __FILE__, __LINE__);
							$db = new DB;
							$db->query($query);
							$rubricAccess = array();
							while ($db->next_record()) {
							  $rubricAccess[$db->v('rubric_id')] = true;
							}
							
							// fetch all rubrics to show the ones not in navigation
							$query = 'SELECT id, name, seclevel '
							      .'FROM '.CPO_RUBRIC.' '
							      .'ORDER BY name';
							DEBUG(1, $query, __FILE__, __LINE__);
							$db->query($query);
							$notInNavigation = array();
							while ($db->next_record()) {
							  $notInNavigation[$db->v('id')] = array(
							      'id'=>0,
							      'l'=>0,
							      'r'=>0,
							      'level'=>1,
							      'childs'=>0,
							      'caption'=>'',
							      'navigation'=>array(),
							      'rubric'=>array('id'=>$db->v('id'), 'name'=>$db->v('name'), 'seclevel'=>$db->v('seclevel'), )
							  );
							}
							
							$navigation = getNavigation();
							foreach ($navigation as $k=>$v) {
							  $path[$v['level']] = $v['caption'];
							
							  if (array_key_exists($v['rubric']['id'], $notInNavigation)) unset($notInNavigation[$v['rubric']['id']]);
							
							  if ($v['rubric']['id']<=0) continue;
							  if (!array_key_exists($v['rubric']['id'], $rubricAccess)) continue;
							
							  $entry = implode('/', array_slice($path, 0, $v['level']));
							  if ($v['caption']!=$v['rubric']['name']) $entry .= ' ('.$v['rubric']['name'].')';
							  if (strlen($entry)>90) $entry = '...'.substr($entry, -87);
							
							
							  if ($v['rubric']['id']!=addslashes($_SESSION['SID_rubric_id'])) echo "<option value='".$v['rubric']['id']."'>".$entry."</option>";
							}
							 $_t = '<option value=""> </option>';
		                foreach ($notInNavigation as $k=>$v) {
		                    if (!array_key_exists($v['rubric']['id'], $rubricAccess)) continue;
		                    print($_t);
		                    $_t = '';
		
		                    $path[$v['level']] = $v['rubric']['name'];
		
		                    $entry = implode('/', array_slice($path, 0, $v['level']));
		                    // no navigational element i
		                    // if ($v['caption']!=$v['rubric']['name']) $entry .= ' ('.$v['rubric']['name'].')';
		                    if (strlen($entry)>90) $entry = '...'.substr($entry, -87);
		
		                    printf('<option value="%d" %s>%s</option>',
		                        $v['rubric']['id'],
		                        ($_SESSION['SID_navigation_id']==$v['id'] && $v['rubric']['id']==$_SESSION['SID_rubric_id']) ? 'selected' : '',
		                        $entry
		                    );
		                }
							
                    print('</select>');
                    print(help('articles-listarticles.html#articles-listarticles-movearticle-rubric')); 
                    ?>
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <?php 
                    echo '<input type="submit" class="button" value="'.___('move article').'">&nbsp;'; 
                    echo '<input type="submit" name="cancel" class="button" value="'.___('cancel').'">';
                    echo '</form>';
                    ?>
                </td>
            </tr>
        </table>
        <?php

        require(CPO_BASEDIR.'_include/footer.php');
        break; // }}}
und nun hat man eine Selectbox mit voll ausgeschriebenen Pfaden. Bei mir Funktionierts ohne Probleme mit der Version 4.0.7.

Grüße
Stefan
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi,

wir haben das damals nicht so gemacht, weil die Texte in den Selectboxen dann unheimlich lang werden und es unübersichtlich wird.

Allerdings sehe ich ein, dass das dann so zu einem Problem fuehrt.

Ich gebe das mal hier in die interne Diskussion.

Balu
Bartels.Schöne
ConPresso Support & Development
Antworten