Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!

Mozan

Mozan

Użytkownik od 03 lip 2014
Offline Ostatnio aktywny lis 15 2014 02:32

W temacie:Obsługa plików

20 sierpnia 2014 - 12:39

Jak udało mi się o \File zapomnieć?

Zdecydowanie zmęczony już byłem.

 

Dzięki :)

 


W temacie:DCA, field X - inputType = "select" - odświeżenie X po którymś z Open...

07 lipca 2014 - 23:39

Dziękuje pięknie :)

 

DcaWizard był tym przykładem którego szukałem.

W moim przypadku potrzebowałem rozszerzyć funkcjonalność inputType = select.

 

Wystarczyło więc:

- w dca dla pola X dodać wizard, który wyświetli odpowiedni link:

public function getWizardLink($dc) {
	$fieldName = "Y";
	$act = 'create';
	$arrLinkParams = array(
		'do'		=> 'XYZ',
		'mode'		=> '2',
		'table'		=> 'tl_XYZ',
		'popup'		=> '1',
		'nb'		=> '1',
		'rt'		=> REQUEST_TOKEN,
		'field'		=> $fieldName,
		'placeId'	=> $dc->id,
		'pid'		=> 1,		// Miejsce w moim XYZ
		'act'		=> $act,
		'id'		=> ''
	);
	$strLinkParams = implode('', array_map(function ($v, $k) { return sprintf("%s=%s&", $k, $v); }, $arrLinkParams, array_keys($arrLinkParams)));

	$arrOptions = array(
		'width'         => 768,
		'title'         => "'" . $titlePopup . "'",
		'url'           => 'this.href',
		'id'            => "'" . $fieldName . "'",
//		'applyLabel'    => "'" . $btnLabel . "'"
	);
	$strOptions = implode(', ', array_map(function ($v, $k) { return sprintf("'%s':%s", $k, $v); }, $arrOptions, array_keys($arrOptions)));

	return ' <a href="contao/main.php?' . $strLinkParams . 
		'" title="' . $title . 
		'" style="padding-left:3px" onclick="' . 
		'Backend.getScrollOffset(); MOJZESTAWJS.openModalWindow({' . $strOptions . '}); return false">' . 
		\Contao\Image::getHtml('alias.gif', $title, 'style="vertical-align:top"') . '</a>';
}

- dodać nowy Widget, który dziedziczy z SelectMenu jako np.: SelectMenuAjax

- dodać do SelectMenuAjax metodę

public function handleAjaxActions($strAction, \DataContainer $dc)

dosłownie - copy/paste z DcaWizard.php, minimalnie ją modyfikując na początku:

// if ($strAction == 'reloadDcaWizard') {
if ($strAction == 'reloadAjaxSelect') {

oraz pod koniec (żeby poprawnie pobierała aktualne wartości zapisane w tabeli dla danego pola)

$arrData = $GLOBALS['TL_DCA'][$dc->table]['fields'][$strField];

switch ($dc->table) {
	case 'tl_XYZ':
		$o = PlaceModel::findByPk($intId);
		$fieldValue = $o->$strField;
		break;
....
}
//$objWidget = new $strClass($strClass::getAttributesFromDca($arrData, $strFieldName, null, $strField, $dc->table, $dc));
$objWidget = new $strClass($strClass::getAttributesFromDca($arrData, $strFieldName, $fieldValue, $strField, $dc->table, $dc));

i przy okazji "wypluwała" wymuszenie odświeżenia select'a (uwielbiam Chosen)

// echo $objWidget->generate();
$ow = $objWidget->generate();
$ow .= "<script>$('ctrl_" . $strField . "').fireEvent('liszt:updated');</script>";
echo $ow;
exit;

- skopiować dcawizard.js do MOJZESTAWJS.js, modyfikując odpowiednio OpenModalWindow()

...
.post({'action':'reloadAjaxSelect', 'name':opt.id, 'REQUEST_TOKEN':Contao.request_token}); 

O duperelach typu autoload.php, config.php nie będę pisał, wystarczy zerknąć do źródeł DcaWizard.