Zum Inhalt springen

Parameterübergabe(Array) per f:link.action

Erstellt am 29. Januar 2014 · 2 Antworten · letzte Antwort am 4. Februar 2014

Tags: Fluid, ViewHelper, Frage

simplepyz26 ·

Hallo,

ich stehe vor folgendem Problem. Ich möchte in einer Liste, Produkte nach Betrag sortieren und komme gerade nicht weiter. Dabei soll nicht auf ein Objekt zugegriffen werden, sondern 2 Parameter(sortfield=amount und sortdir=order_ascending/descending) in ein Array gepackt mitgegeben werden. Vom List View -> List Controller -> List repository müssen diese zwei Werte geschickt werden.

Momentan sieht dass bei mir so aus :
List View :

<div class="sort"><f:link.action action="list" arguments="{listConfig: {sortField:'amount', sortDir:'ORDER_ASCENDING' }}"><f:translate key='tx_chswishlist.sort_amount'/></f:link.action></div>

Controller (listAction) :

/**
* Shows the list view
* @param array $listConfig
* @return void
*/
public function listAction($listConfig = array()) {

$wishes = $this->wishRepository->findByTypeAndStatus(0, 0, $listConfig);
$this->view->assign('wishes', $wishes);
$this->view->assign('settings', $this->settings);
}

Repository:

class WishRepository extends Repository {

protected $defaultOrderings = array(
'sorting' => QueryInterface:😮RDER_ASCENDING,
);

/**
* finds wish by type and status
* @param int $type
* @param int $status
* @param array $listConfig
* @return mixed
*/
public function findByTypeAndStatus($type,$status,$listConfig) {

$query = $this->createQuery();
$query->matching($query->logicalAnd($query->equals('type',$type),$query->equals('status', $status)));
$query->setOrderings(array('amount' => QueryInterface:😮RDER_ASCENDING,'sorting' => QueryInterface:😮RDER_ASCENDING));
return $query->execute();
}

'amount' wird durch ersten Wert ersetzt, ORDER_ASCENDING wird durch den zweiten Wert ersetzt.

Vielen dank für jedweilige Hilfe!

freshman17 ·

Fluid:

<f:link.action action="list" arguments="{listConfig:{foo: 'bar',baz:'buz'}}">Do It!</f:link.action>

Action

/**
 * @param array $listConfig
 * @return void
 */
public function fooAction( $listConfig = NULL ) {	
	print_r($listConfig );
}

Im Install Tool 'pageNotFoundOnCHashError' => '0'

gerade mit TYPO3 6.1.7 erfolgreich getestet

simplepyz26 ·

Habe es in der Zwischenzeit anderst gelöst, trotzdem vielen dank!

Nun aber habe ich ein neues "Problem".

Ich möchte wenn ich die Seite per Pagination wechsle, die Daten die nach dem sortieren im Formular sind beibehalten, also die Sortierung soll beim Seitenwechsel nicht flöten gehen, nachdem ich sie ausgeführt habe. Ich weiss dass ich irgenwie die Werte am Pagination anhängen muss, aber finde nichts was mich gerade weiterbringt?!

Bin für jede Hilfe dankbar!

Partial(html)

<div class="dropDownPagination span12">
    <f:form method="GET" class="sortDropDown span4" action="list">
        <f:form.hidden name="listConfig[currentPage]" value="{listConfig.currentPage}"></f:form.hidden>
        <f:form.hidden name="listConfig[sortField]" value="amount"></f:form.hidden>

        <div class="sortText">Sortieren Nach Betrag:</div>
        <f:form.select name="listConfig[sortDir]" value="{listConfig.sortDir}"  options="{0: 'Please select', ASC : 'Aufsteigend', DESC : 'Absteigend'}" additionalAttributes="{onChange : 'this.form.submit()'}"/>

    <f:flashMessages class="alert alert-warning"/>
    <div class="pagination span8">
        <f:if condition="{prevPagination} > 0 ">
            <f:then>
            <div class="paginationPrev">
                <f:link.action action="list" arguments="{listConfig: {currentPage:'{prevPagination}'}}"><f:translate key='tx_chswishlist.pagination_prev'/></f:link.action>
            </div>
            </f:then>
        </f:if>
        <f:for each="{pagination}" as="paginate" iteration="i">
            <div class="paginationPart">
                <f:if condition="{listConfig.currentPage} == {i.cycle}">
                    <f:then>
                        <f:link.action class="active" action="list" arguments="{listConfig: {currentPage:'{i.cycle}'}}">{i.cycle}</f:link.action>
                    </f:then>
                    <f:else>
                        <f:link.action action="list" arguments="{listConfig: {currentPage:'{i.cycle}'}}">{i.cycle}</f:link.action>
                    </f:else>
                </f:if>
            </div>
        </f:for>
        <f:if condition="{numOfPages} != {listConfig.currentPage}">
            <f:then>
            <div class="paginationNext">
                <f:link.action action="list" arguments="{listConfig: {currentPage:'{nextPagination}'}}"><f:translate key='tx_chswishlist.pagination_next'/></f:link.action>
            </div>
            </f:then>
        </f:if>
    </div>
    </f:form>
</div>