+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Beim erstellen eines Menulinks gleich die anzuzeigenden Module auswählen!?

  1. #1
    Neu an Board
    Registriert seit
    17.03.2010
    Beiträge
    2
    Bedankte sich
    1
    1 Danksagung in 1 Beitrag

    Standard Beim erstellen eines Menulinks gleich die anzuzeigenden Module auswählen!?

    hab da mal ne frage

    gibt es eine möglichkeit beim erstellen eines neuen menülinks gleich aus zu wählen welche module angezeigt werden???

    jedes mal wenn ich einen neuen link hinzugfüge muss ich mich anschließend durch die module klicken um diese auszuwählen das diese beim klick auf den link angezeigt werden: oops:

    gibt es da ne erweiterung, einen hack, ein tip oder ähnliches??
    Geändert von kwilms (28.03.2010 um 20:11 Uhr) Grund: Habs selbst gehackt :)

  2. #2
    Moderator Avatar von Orpheus2510
    Registriert seit
    18.10.2006
    Beiträge
    13.245
    Bedankte sich
    151
    Erhielt 3.159 Danksagungen
    in 2.880 Beiträgen

    Standard

    Der Weg geht nur andersherum - in den Modulen ordnest du die Zuordnung zu Menüpunkten zu. Da in den Menüpunkten keine Zuordnung integriert ist, müßte man etliches am Core ändern, um das durch einen Hack zu realisieren - das tut sich niemand an.
    Gruß, Orpheus2510
    Kein Support für Artisteer-Templates und per PN! | Thread gelöst? | Joomla-FAQ

  3. Erhielt Danksagungen von:


  4. #3
    Neu an Board
    Registriert seit
    17.03.2010
    Beiträge
    2
    Bedankte sich
    1
    1 Danksagung in 1 Beitrag

    Standard ja ist etwas arbeit

    hab mich jetzt mal selbst ran gesetzt und ein paar dateien geändert. ich musste 4 dateien ändern, 3 in administrator/com_menus und 1 in administrator/com_modules.

    das erste was ich geändert habe war die datei com_menus/models/item.php. habe dort zwei funktionen hinzugefügt die die datenabfrage regeln.
    Code:
    	## Hack
    	function getAllModules(){
    		$db = &$this->getDBO();
    		$query = "SELECT id as value,CONCAT_WS('-position=',title,position) as text from #__modules WHERE published=1 AND client_id=0";
    		$db->setQuery($query);
    		$db->query();
    		$modules = $db->loadObjectList();
    		return $modules;
    	}
    	function getSelectedModules($menuid){
    		$db = &$this->getDBO();
    		$query = "SELECT moduleid as value from #__modules_menu WHERE menuid=0 OR menuid=".(int) $menuid;
    		$db->setQuery($query);
    		$db->query();
    		$modules = $db->loadObjectList();
    		return $modules;
    	}
    	##end Hack
    dann habe ich die funktion edit() in der datei com_menus/views/item/view.php um folgendes erweitert
    Code:
    		#Begin Hack
    		$model = &$this->getModel();
    		$selectedModules= $model->getSelectedModules($item->id);
    		$allModules		= $model->getAllModules();
    		$this->assignRef('allModules', $allModules);
    		$this->assignRef('selectedModules', $selectedModules);
    		# End Hack
    anschliessend musste ich in der com_menus/views/item/tmpl/form.php etwas javascript hinzufügen
    Code:
    <!-- Begin Hack
    Das Script wurde von mir aus der Datei controller.php der com_modules kopiert
    -->
    				<script type="text/javascript">
    					function allselections() {
    						var e = document.getElementById('selections');
    							e.disabled = true;
    						var i = 0;
    						var n = e.options.length;
    						for (i = 0; i < n; i++) {
    							e.options[i].disabled = true;
    							e.options[i].selected = true;
    						}
    					}
    					function disableselections() {
    						var e = document.getElementById('selections');
    							e.disabled = true;
    						var i = 0;
    						var n = e.options.length;
    						for (i = 0; i < n; i++) {
    							e.options[i].disabled = true;
    							e.options[i].selected = false;
    						}
    					}
    					function enableselections() {
    						var e = document.getElementById('selections');
    							e.disabled = false;
    						var i = 0;
    						var n = e.options.length;
    						for (i = 0; i < n; i++) {
    							e.options[i].disabled = false;
    						}
    					}
    				</script>
    <!--  End Hack -->
    und die 'Menu Item Details Section' tabelle um die ausgabe in einer auswahlliste erweitern
    Code:
    						<!-- Begin Hack
    						 * Dieser Teil wurde aus der Datei admin.modules.html.php der Komponente com_modules
    						 * kopiert und leicht verändert.
    						-->
    					<tr>
    						<td valign="top" class="key">
    							<?php echo JText::_( 'Modules' ); ?>:
    						</td>
    						<td>
    						<?php if ($this->item->client_id != 1) : ?>
    							<?php if ($this->item->pages == 'all') { ?>
    							<label for="modules-all"><input id="modules-all" type="radio" name="modules" value="all" onclick="allselections();" checked="checked" /><?php echo JText::_( 'All' ); ?></label>
    							<label for="modules-none"><input id="modules-none" type="radio" name="modules" value="none" onclick="disableselections();" /><?php echo JText::_( 'None' ); ?></label>
    							<label for="modules-select"><input id="modules-select" type="radio" name="modules" value="select" onclick="enableselections();" /><?php echo JText::_( 'Select From List' ); ?></label>
    							<?php } elseif ($this->item->pages == 'none') { ?>
    							<label for="modules-all"><input id="modules-all" type="radio" name="modules" value="all" onclick="allselections();" /><?php echo JText::_( 'All' ); ?></label>
    							<label for="modules-none"><input id="modules-none" type="radio" name="modules" value="none" onclick="disableselections();" checked="checked" /><?php echo JText::_( 'None' ); ?></label>
    							<label for="modules-select"><input id="modules-select" type="radio" name="modules" value="select" onclick="enableselections();" /><?php echo JText::_( 'Select From List' ); ?></label>
    							<?php } else { ?>
    							<label for="modules-all"><input id="modules-all" type="radio" name="modules" value="all" onclick="allselections();" /><?php echo JText::_( 'All' ); ?></label>
    							<label for="modules-none"><input id="modules-none" type="radio" name="modules" value="none" onclick="disableselections();" /><?php echo JText::_( 'None' ); ?></label>
    							<label for="modules-select"><input id="modules-select" type="radio" name="modules" value="select" onclick="enableselections();" checked="checked" /><?php echo JText::_( 'Select From List' ); ?></label>
    							<?php } ?>
    						<?php endif; ?>
    						</td>
    					</tr>
    						<tr>
    							<td class="key" valign="top" align="right">
    								<?php echo JText::_( 'Show Modules' ); ?>:
    							</td>
    							<td>
    								<?php echo JHTML::_('select.genericlist',   $this->allModules, 'selections[]', 'class="inputbox" size="15" multiple="multiple"', 'value', 'text', $this->selectedModules, 'selections' );?>
    							</td>
    						</tr>
    						<!-- End Hack -->
    last but not least musste ich noch die funktion save() in der datei administrator/components/com_modules/controller.php ändern da module die bei allen menulinks angezeigt werden sollen in der tabelle #__modules_menu mit einer 0 gekenzeichnet werden.
    Code:
                    //Begin Hack
    		//dieser Teil wird überflüssig
    		// check needed to stop a module being assigned to `All`
    		// and other menu items resulting in a module being displayed twice
    		/*if ( $menus == 'all' ) {
    			// assign new module to `all` menu item associations
    			$query = 'INSERT INTO #__modules_menu'
    			. ' SET moduleid = '.(int) $row->id.' , menuid = 0'
    			;
    			$db->setQuery( $query );
    			if (!$db->query()) {
    				return JError::raiseWarning( 500, $db->getError() );
    			}
    		}
    		else
    		{*/
    		//das hier brauchen wir noch, Orginal Code
    		foreach ($selections as $menuid)
    			{
    				// this check for the blank spaces in the select box that have been added for cosmetic reasons
    				if ( (int) $menuid >= 0 ) {
    					// assign new module to menu item associations
    					$query = 'INSERT INTO #__modules_menu'
    					. ' SET moduleid = '.(int) $row->id .', menuid = '.(int) $menuid
    					;
    					$db->setQuery( $query );
    					if (!$db->query()) {
    						return JError::raiseWarning( 500, $db->getError() );
    					}
    				}
    			}
    		//} End Hack
    ja das wars auch schon, bei mir funzt es prima und erspart mir ne menge sucherrei wenn ich einen neuen menueintrag hinzufügen möchte. würde es aber immer erstmal lokal testen da es ein hack ist und es sein kann das ich etwas übersehen habe!!!!
    am ende noch ein hinweiss, sollte man schon module haben die bei allen links angezeigt werden, sollte man im backend bereich unter erweiterungen->module diese aufrufen und nochmals speichern damit diese module auch allen menu-einträgen zugeordnet werden und nicht wie vorher mit einer 0 gekennzeichnet sind. hat folgenden hintergrund, wenn man vorher einen menu-eintrag bearbeitet und dort ein modul abwählt das vorher mit einer 0 gezeichnet war, wirds nur noch in diesem einen menu-eintrag angezeigt!!!

    und am end noch das übliche, machste ein update ist alles weg
    Geändert von kwilms (28.03.2010 um 20:06 Uhr)

  5. Erhielt Danksagungen von:


+ Antworten

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein